This is simple, just add another entry !my_folder in your .gitignore
#ignore all kind of files
*
#except php files
!*.php
!my_folder
The last line will take special care of my_folder, and will not ignore any php files within it; but files within other folders will still be ignored because of the first pattern of *.
EDIT
I think I misread your question. If you want to ignore all files except .php files, you can use
#ignore all kind of files
*.*
#except php files
!*.php
This will not ignore any file which doesn’t have an extension (example: if you have README and not README.txt ), and will ignore any folder with a . in its name (example: directory named module.1).
FWIW, git doesn’t track directories, and hence there is no way to specify ignore rules for directory vs file