[php] erreur fonction copy

Résolu/Fermé
28_seb Messages postés 84 Date d'inscription dimanche 22 octobre 2006 Statut Membre Dernière intervention 31 mai 2010 - 4 mai 2009 à 11:20
P@t@ch0n Messages postés 565 Date d'inscription mercredi 15 avril 2009 Statut Membre Dernière intervention 28 décembre 2009 - 4 mai 2009 à 20:44
Bonjour,

j'ai une erreur qui semble bête mais je n'arrive pas à la résoudre !.

J'essaye de copier des images qui se trouvent sur un site afin de les avoir sur mon serveur (je prépare un lecteur RSS). J'ai pensé à la fonction copy().

donc j'essaye en local mais ca ne marche pas, je suis sous fedora, et j'ai l'erreur suivante :


Warning: copy(test.txt.bak) [function.copy]: failed to open stream: Permission denied in /var/www/html/php/test/copy.php on line 5

j'ai changé les droits du repertoire test et du fichier test.txt en 777 mais rien n'y fait.


Y'a-t-il un truc que j'ai oublié de faire.

P.S : J'ai testé que un serveur easyphp sous windows et ca merche en local !


Merci pour votre aide.

Mon code tt simple :

<?php
$file = 'test.txt';
$newfile = 'test.txt.bak';

if (!copy($file, $newfile)) {
echo "La copie $file du fichier a échoué...\n";
}

?>
A voir également:

15 réponses

Je commence à manquer d'idées
Ce que tu as ajouté te permet de rendre le répertoire cité visible via http, ça ne change rien à l'accessibilité des fichiers par fopen.

As-tu essayé de faire un petit script de lecture ? Peut-être que tu ne travailles pas sur le répertoire que tu crois, pour une raison qu'il restera à déterminer (Car tu ne mets pas un nom de chemin complet dans le nom du fichier)

justement, autre suggestion : mettre un nom de chemin complet /var/www/html/php/test/essai.txt
1
Bonjour

D'après le message , c'est plutôt sur test.txt.bak qu'il y a un problème. Existe-t-il déjà ? Et si oui, avec quels droits ?
D'autre part, tu dis avoir changé les droits sur le répertoire, mais as-tu vérifié que le changement a bien été pris en compte ?
0
28_seb Messages postés 84 Date d'inscription dimanche 22 octobre 2006 Statut Membre Dernière intervention 31 mai 2010 11
4 mai 2009 à 11:55
Bonjour,

le fichier test.txt.bak c'est le nom du nouveau fichier, le fichier à copier s'appelle test.txt, il est en 777.

Le changement du rep a bien été pris en compte.

même ce code ne marche pas :

<?php
$fp = fopen('data.txt', 'w');
fwrite($fp, '1');
fwrite($fp, '23');
fclose($fp);

// le contenu de 'data.txt' est maintenant 123 et non 23 !
?>

J'ai testé qur un pc XP avec easyPHP cele fonctionne, y'a peut être un problème a gérer avec php.ini, mais je ne sais pas.

Merci

Seb
0
P@t@ch0n Messages postés 565 Date d'inscription mercredi 15 avril 2009 Statut Membre Dernière intervention 28 décembre 2009 85
4 mai 2009 à 12:31
Quand tu dis que ça ne fonctionne pas, c'est à dire ?
Tu n'obtiens pas " 123 " dans le fichier sur linux ?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
28_seb Messages postés 84 Date d'inscription dimanche 22 octobre 2006 Statut Membre Dernière intervention 31 mai 2010 11
4 mai 2009 à 13:23
slt,

J'ai ca comme erreur,

Warning: fopen(data.txt) [function.fopen]: failed to open stream: Permission denied in /var/www/html/php/test/write_seb.php on line 2


Je pense que c'est la version d'apache qui est tres restrictive, je dois paramétrer qqchose je pense !

une idée ? thx
0
vérifie dans http.conf si tu as
php_admin_value open_basedir none
et dans php.ini la valeur de open_basedir
0
28_seb Messages postés 84 Date d'inscription dimanche 22 octobre 2006 Statut Membre Dernière intervention 31 mai 2010 11
4 mai 2009 à 14:04
dans php.ini j'ai

; open_basedir, if set, limits all file operations to the defined directory
; and below. This directive makes most sense if used in a per-directory
; or per-virtualhost web server configuration file. This directive is
; *NOT* affected by whether Safe Mode is turned On or Off.
;open_basedir =


dans /etc/httpd/conf/httpd.conf, je n'ai pas : php_admin_value open_basedir none

j'ai rajouté cette ligne pour autoriser le dossier :

<Directory "/var/www/html/php">
Options Indexes MultiViews FollowSymLinks
AllowOverride None
Order allow,deny
Allow from all
</Directory>

mais rien n'y fait


Je ne comprends plus

thx
0
P@t@ch0n Messages postés 565 Date d'inscription mercredi 15 avril 2009 Statut Membre Dernière intervention 28 décembre 2009 85
4 mai 2009 à 14:39
Rien à voir avec ça.

T'as tenté le chmod() avec php sur le répertoire avant la création de ton fichier ?

Que donne un ls -l de ton répertoire ?
0
28_seb Messages postés 84 Date d'inscription dimanche 22 octobre 2006 Statut Membre Dernière intervention 31 mai 2010 11
4 mai 2009 à 14:52
tt est autorisé, lol !


[root@localhost test]# ls -l
total 40
-rwxrwxrwx 1 root root 144 mai 4 10:54 copy.php
-rwxrwxrwx 1 root root 165 mai 4 10:52 copy.php~
-rwxrwxrwx 1 sebastien sebastien 146 mai 4 11:49 copy_seb.php
-rwxrwxrwx 1 sebastien sebastien 144 mai 4 11:48 copy_seb.php~
-rwxrwxrwx 1 sebastien sebastien 0 mai 4 11:43 data.txt
-rwxrwxrwx 1 root root 1656 mai 4 10:41 img.jpg
-rwxrwxrwx 1 sebastien sebastien 1 mai 4 11:49 test2.txt
-rwxrwxrwx 1 sebastien sebastien 1 mai 4 11:55 test2.txt.bak
-rwxrwxrwx 1 sebastien root 15 mai 4 10:54 test.txt
-rwxrwxrwx 1 root root 150 mai 4 11:38 write.php
-rwxrwxrwx 1 sebastien sebastien 150 mai 4 11:40 write_seb.php
0
28_seb Messages postés 84 Date d'inscription dimanche 22 octobre 2006 Statut Membre Dernière intervention 31 mai 2010 11
4 mai 2009 à 15:26
j'ai un logiciel qui s'est ouver certwatch, d'apres les logs il bloque les scripts,

comprends pas pkoi certwatch qui gere les certificat SSL vient faire la !!!


Tkx
0
Tu crois que ça a un rapport avec ton problème d'écriture dans les fichiers ?
As-tu essayé avec un nom de chemin complet ?
0
28_seb Messages postés 84 Date d'inscription dimanche 22 octobre 2006 Statut Membre Dernière intervention 31 mai 2010 11
4 mai 2009 à 15:34
Oui, j'ai essayé avec le nom complet, j'ai même essayé dans /tmp mais le même probleme.

Quand j'ai relancé pour la xieme fois le script, j'ai SElinux qui se lance et bloque cet appel donc je pense que ca vient de la mais pas sur.
0
28_seb Messages postés 84 Date d'inscription dimanche 22 octobre 2006 Statut Membre Dernière intervention 31 mai 2010 11
4 mai 2009 à 15:40
je viens de lancer le script et j'ai SELINUX qui est apparu
il a ecrit plusieurs truc :


Résumé
SELinux empêche le démon httpd d'utiliser des fichiers potentiellement mal étiquetés ./data.txt (httpd_sys_content_t).

Description détaillée
SELinux a refusé au démon httpd d'accéder à des fichiers potentiellement mal étiquetés ./data.txt. Cela signifie que SELinux n'autorisera pas httpd à utiliser ces fichiers. De nombreuses applications tierces installent des fichiers html dans des répertoires que la stratégie de SELinux ne peut pas prédire. Ces répertoires doivent être étiquetés avec un contexte de fichier permettant à httpd d'y accéder.

Autoriser l'accès
Si vous souhaitez modifier le contexte du fichier de ./data.txt de façon à ce que httpd puisse y avoir accès, vous devez l'exécuter en utilisant chcon -t httpd_sys_content_t './data.txt' Vous pouvez regarder la page de manuel httpd_selinux pour davantage d'informations.


J'ai jms eu ce probleme dans le passé, comprends pas gd chose !!


Thx pour votre aide
0
28_seb Messages postés 84 Date d'inscription dimanche 22 octobre 2006 Statut Membre Dernière intervention 31 mai 2010 11
4 mai 2009 à 16:12
Slt

Merci pour votre aide.

J'ai désactivé SELinux, il bloqué le deamon httpd, j'aurais du le voir depuis lgtps, arf

ouf le problème est réglé !!


seb
0
P@t@ch0n Messages postés 565 Date d'inscription mercredi 15 avril 2009 Statut Membre Dernière intervention 28 décembre 2009 85
4 mai 2009 à 20:44
On aurait pu chercher longtemps :D
0