2010-07-30 2 views
3

J'ai un script php:ZipArchive php class extrait les fichiers en tant que root. Pourquoi?

$extract_dir = "./"; 
$extract_file = "extractME.zip"; 

$zip = new ZipArchive; 
$res = $zip->open($extract_file); 
if ($res === TRUE) { 
    $zip->extractTo($extract_dir); 
    $zip->close(); 
    echo "ok"; 
} else { 
    echo "failed"; 
} 

Mais quand j'exécute ce script, via http://www.mywebsite.com/extract.php

Tous les fichiers sur FTP sont spectacle avec PROPRIÉTAIRE 'root', mais pas l'utilisateur ex. "néo" comme il se doit. L'utilisateur ne peut donc pas éditer/renommer/supprimer ces fichiers.

Est-il possible de résoudre ce problème de toute façon (je possède le serveur), que les fichiers seront extraits avec "USERNAME" OWNERSHIP?

Répondre

0

Il extrait en tant qu'utilisateur exécutant le serveur Web (note: vous ne devriez pas l'exécuter en tant que root). Essayez d'utiliser chown.

+0

chown NE FONCTIONNE PAS, parce que seule l'utilisateur du serveur racine est possible. Et je ne veux pas donner accès à n'importe quel utilisateur (même MASTER USER) pour se connecter à VIA root. Et chown ne fonctionne pas avec le niveau d'utilisateur. Donc, c'est probablement le problème de configuration du serveur. Je lance souvent un "chown -R usrNAME: usrNAME/home/usrNAME/public_html/*" mais c'est une mauvaise solution – ozzWANTED

+0

@ozzwanted Ce n'est pas ce que je voulais dire. Je suggère de chowner les fichiers après les avoir extraits - c'est pourquoi j'ai lié la commande chown de php. Et c'est * possible *, puisque votre serveur web fonctionne en tant que root. – Maerlyn

3

ozzwanted, pour une raison quelconque, votre serveur web (apache) s'exécute en tant que root donc tout fichier qu'il crée sera fait en tant que root. Cela ne devrait jamais être le cas. Apache fonctionne généralement comme 'www-data' ou 'httpd', ou 'personne' ou 'dieu' selon la distribution linux.

Je vous suggère de regarder cela du point de vue de l'administrateur système et de demander à quelqu'un de le trier avant de vous faire exploiter. (en supposant qu'il s'agit d'un serveur live)

Vous pouvez utiliser la fonction www.php.net/chown ou vous pouvez exécuter une commande 'chown' sur la ligne de commande ou le faire depuis PHP avec quelque chose comme system() ou exec () les fonctions.

Bonne chance.

Questions connexes