Déplacer un fichier et le renommer
Compris PHP renommer serait mon meilleur pari. Je n'ai pas trouver de nombreux exemples sur la façon d'utiliser des Url relatives au bien, donc je sorte de compromis. De toute façon, ce me donner la permission refusée:
Je veux faire ceci:
$file = "../data.csv";
rename("$file", "../history/newname.csv");
Où ../ de cours pourrait revenir 1 répertoire où le script est exécuté. Je ne pouvais pas trouver un moyen...donc j'ai fait ceci à la place:
$file = "data.csv";
$path = dirname(realpath("../".$file));
rename("$path/$file", "$path/history/newname.csv");
Cependant, je suis permission denied (oui le dossier de l'historique est détenue par www-data, et oui de données.csv est détenue par www-data). Je pensais que c'était bizarre alors j'ai essayé un test simple:
rename( 'tempfile.txt', 'tempfile2.txt' );
et j'ai pris soin de www-data a le plein contrôle sur tempfile.txt...encore obtenu la permission refusée. Pourquoi? le fichier votre de le renommer pour exister? pouvez-vous ne pas renommer comme linux mv? J'ai donc, au lieu de simplement copier() et unlink()?
OriginalL'auteur ParoX | 2010-07-25
Vous devez vous connecter pour publier un commentaire.
Pour déplacer un fichier d' "../" a "../histoire/", un processus a besoin de l'autorisation d'écriture à la fois " .. " et "../histoire/".
Dans votre exemple, vous êtes manifestement en manque d'écriture à des "../". Les autorisations pour le fichier en cours de déplacés ne sont pas pertinentes, par la manière.
OriginalL'auteur Marc Donges
Pas seulement la propriété joue un rôle, mais aussi les autorisations de fichier. Assurez-vous que les autorisations sont définies correctement dans le fichier source et le répertoire de destination (par exemple,
chmod 644 data.csv
).Est
www-data
le même utilisateur d'Apache?Edit: Prendre soin de fournir existants, des chemins absolus à
realpath()
. Aussi méfiez-vous des éléments suivants:Cela peut rapporter à rien, parce que le fichier
../data.csv
peut ne pas exister. I. e., le résultat derealpath()
sur un fichier non existant estfalse
.Voici un code qui pourrait fonctionner mieux pour vous:
Vous devez être extrêmement prudent que
$file
ne peut être modifié par le visiteur, car il pourrait changer d'une demande de manipuler le fichier est renommé où.644
serait mieux, depuis un fichier CSV ne devrait pas être exécutable.oui le chmod est de 644, j'ai même essayé de 777 à le faire fonctionner. Rien n'est de travail. et apache est www-data, je le sais parce que j'ai déplacer d'autres trucs autour de et de avait besoin www-data, en plus j'ai vérifié haut.
Le chemin d'accès complet aux données.csv /var/imvu/produits/ht/clients/test/data.csv où /var/ est la propriété de root, imvu test est détenue par wwwftp (ftp j'ai fait donc je n'ai pas de ftp à la racine). Aussi, comme je l'ai dit, le répertoire où la sa va (de l'histoire) est la propriété de www-data.
Se pourrait-il que le fichier est en cours d'utilisation? Vous pouvez le renommer en tant qu'administrateur?
Il pourrait d'été, mais le fichier de test que j'ai fait, tempfile.txt a été créé par moi-même de la racine (jamais ouvert par quoi que ce soit) , dans lequel je puis chmod à 777 et puis chowned à www-data...toujours l'habitude de le renommer.
OriginalL'auteur Paul Lammertsma