[php] erreur fonction copy

Résolu
28_seb Messages postés 84 Date d'inscription   Statut Membre Dernière intervention   -  
P@t@ch0n Messages postés 565 Date d'inscription   Statut Membre Dernière intervention   -
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

le père
 
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
le père
 
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   Statut Membre Dernière intervention   11
 
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   Statut Membre Dernière intervention   85
 
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   Statut Membre Dernière intervention   11
 
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
le père
 
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   Statut Membre Dernière intervention   11
 
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   Statut Membre Dernière intervention   85
 
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   Statut Membre Dernière intervention   11
 
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   Statut Membre Dernière intervention   11
 
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
le père
 
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   Statut Membre Dernière intervention   11
 
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   Statut Membre Dernière intervention   11
 
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   Statut Membre Dernière intervention   11
 
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   Statut Membre Dernière intervention   85
 
On aurait pu chercher longtemps :D
0