2009-08-26 14 views
0

J'essaye d'écrire un script d'installation pour un système sur lequel j'ai travaillé. Le script copie certains fichiers par défaut d'un emplacement à un autre et crée divers dossiers pour eux. J'ai un peu de plaisir à travailler, mais le seul problème est que lorsque je me connecte via FTP, je ne peux pas éditer ou supprimer les fichiers que PHP a déplacés pour moi.Autorisations de fichier PHP ... l'obtenir "écrire"?

Si je me connecte via le terminal que je peux heureusement "chmod -R 777 sudo [dir]" et le problème est résolu, la question est donc:

Qu'est-ce que je manque à la fin de PHP?

ma fonction des autorisations est la suivante:

function set_permissions($file) 
{ 
    if (file_exists($file)): 
    chmod($file,0777); 
    endif;     
} 

Je comprends qu'il est idéal pas à 100% pour définir les autorisations à 777, mais je suis simplement en train de réaliser le résultat de pouvoir modifier les fichiers via FTP , après PHP les a déplacés pour moi.

J'espère avoir été assez clair. Cela me laisse perplexe maintenant de sorte que toute aide est appréciée :)

Tom

modifier: L'ensemble du processus est la suivante:

mkdir($root_dir, 0777); 
mkdir($images_dir, 0777); 
if (!copy($orig_logo, $new_logo)) 
{ 
    echo "failed to copy $orig_logo..."; 
} 
    // see function above for details on set_permissions...  
    $this->set_permissions($new_logo); 
} 

(Tous les chemins sont corrects aussi)

éditer: Le fichier avant que je me connecte via le terminal a les permissions suivantes:

-rwxrwxrwx 1 www-data www-data 2739 2009-08-26 01:45 base.css 

Le fichier après que je login et le changer a:

-rwxrwxrwx 1 www-data www-data 2739 2009-08-26 01:45 base.css 

Le système est un système de gestion de contenu qui vous permet d'éditer et de supprimer des fichiers dans la zone d'administration, et assez curieusement, cela fonctionne bien . Il semble que les fichiers sont en quelque sorte verrouillés à partir de quelqu'un d'autre que Apache ... mais les informations du fichier suggèrent le contraire. C'est étrange ...

Répondre

1

Des sons comme votre répertoire ont également besoin des autorisations d'écriture.

+0

désolé j'aurais dû mentionner que les répertoires que je déplace les fichiers ont également des autorisations qui leur sont appliquées. Avant de déplacer les fichiers dans les répertoires, je crée les répertoires en utilisant les éléments suivants: mkdir ($ default_dir, 0777); Espérons que cela aide ... – Tisch

+0

Aucune ACL en vigueur? –

+0

désolé d'être épais? ACL? – Tisch

1

Êtes-vous sûr que le fichier existe ou que le chemin est correct?

1

Si vous pouvez chmod -R 777 via le terminal pour résoudre le problème, puis quelles étaient les autorisations définies par PHP avant de courir chmod ??? Évidemment, pas 777. Je suppose que votre code PHP ne change pas réellement les permissions.

Lookat à votre code, votre fonction de changement de permission pourrait échouer silencieusement si le fichier n'existe pas - par exemple, vous lui donnez des noms de fichiers invalides (mauvais dossier? Mauvais chemin relatif?) Mais vous ne pouvez pas dites parce que votre fonction set_permissions() a trop peur de vous avertir. Vous devez réécrire comme suit:

function set_permissions($file) 
{ 
    if (!file_exists($file)) 
    throw new Exception(__FUNCTION__ . "() file doesn't exist! '$file'"); 
    chmod($file,0777); 
    error_log("chmod 777 $file"); // debug 
} 

Cela vous permet de voir ce qui se passe, et vous remarquerez certainement si vous n'avez pas vos noms de fichiers corrects.

+0

Le fichier avant que je me connecte via le terminal a les autorisations suivantes: -rwxrwxrwx 1 www-data www-data 2739 2009-08-26 01: 45 base.css Le fichier après que je login et le changer a: -rwxrwxrwx 1 www-data www-data 2739 2009-08-26 01:45 base.css donc, en réponse, je dois confirmer que le PHP fonctionne correctement. Il vaut également la peine de noter que si j'utilise mon système pour détailler les fichiers via un navigateur ... il va heureusement les supprimer, et je peux aussi les éditer en utilisant mon système aussi. – Tisch

Questions connexes