perchè principalmente è un problema di php.

Sui server linux, i permessi di un file o di una cartella di default sono gestiti dall'umask, che in pratica è un numero ottale che indica quali permessi associare alla creazione.

A meno che tu non sia l'amministratore del server e voglia veramente mettere un umask del genere (ti consiglio di non farlo, 777 permette di fare tutto a tutti), le funzioni che ti possono interessare lato php sono le seguenti:

Questa setta l'umask per la sessione corrente, se non sai quali numeri associare, guarda tra i commenti, c'è un esempio che ti farà capire.

http://fr.php.net/manual/it/function.umask.php

Puoi passare ad ogni creazione di directory come secondo parametro i permessi che vuoi associare in formato ottale (ciò vuol dire che se devi dare permessi 777 dovrai passare come argomento 0777).

http://fr.php.net/manual/it/function.mkdir.php

Ora una domanda, perchè devi associare 777?

Se un server è configurato correttamente, per assurdo potrebbero bastare permessi 700 per permettere all'utente con cui gira il web server di fare tutto quello che vuole.

ciao