8795 sujets

Développement web côté serveur, CMS

Bonjour à tous,

Voici mon problème,
J'ai réalisé une petite interface administrateur en local.
Je l'ai mise en test sur un site mais aux tests vis à vis de l'image cela me donne une erreur de ce type (dans firefox, safari).

a écrit :
Warning: getimagesize() [function.getimagesize]: open_basedir restriction in effect. File(C:\WINDOWS\TEMP\php50B.tmp) is not within the allowed path(s): (../.;d:\www\php\htdocs\tmp) in d:\www\cein.be\htdocs\test\admin\admin.php on line 90

Warning: getimagesize(C:\WINDOWS\TEMP\php50B.tmp) [function.getimagesize]: failed to open stream: Operation not permitted in d:\www\cein.be\htdocs\test\admin\admin.php on line 90

Warning: getimagesize() [function.getimagesize]: open_basedir restriction in effect. File(C:\WINDOWS\TEMP\php50A.tmp) is not within the allowed path(s): (../.;d:\www\php\htdocs\tmp) in d:\www\cein.be\htdocs\test\admin\admin.php on line 91

Warning: getimagesize(C:\WINDOWS\TEMP\php50A.tmp) [function.getimagesize]: failed to open stream: Operation not permitted in d:\www\cein.be\htdocs\test\admin\admin.php on line 91


J'ai donc essayé de mettre un dossier "tmp" à la racine de mon ftp, mais cela ne change rien.

J'ai fais un print_r de $_file et cela me donne ceci :
a écrit :
Array ( [ name ] => big_article.jpg [ type ] => image/jpeg [ tmp_name ] => C:\WINDOWS\TEMP\php513.tmp [ error ] => 0 [ size ] => 18554 )


Et voici le code qui a un soucis dans mon fichier admin :
$image_tab_size = getimagesize($_FILES['image']['tmp_name']);
$miniature_image_tab_size = getimagesize($_FILES['miniature']['tmp_name']);


Si vous avez une solution ou une piste je suis preneur.
Je vous remercie.

Gregory.
Modifié par doncho (09 Apr 2012 - 11:10)
Bonjour,
Regarde la lettre attribué a ton disque dur.
je vois un disque D et un C.
Modifié par birshmark (09 Apr 2012 - 11:49)
Regardes si les permissions pour accéder à ton fichier sont suffisantes. Et fais un chmod le cas échéant.
Mais le problème c'est qu'il veut accéder à un fichier présent dans le dossier windows sur l'espace ftp que m'a fourni mon hebergeur.

a écrit :
Warning: getimagesize() [function.getimagesize]: open_basedir restriction in effect. File(C:\WINDOWS\TEMP\php50B.tmp) is not within the allowed path(s): (../.;d:\www\php\htdocs\tmp)


Seulement sur un ftp d'un hebergeur on a pas accès à cela !
Donc impossible de changer les droit de ce fichier ou dossier. Smiley sweatdrop Smiley confus

Enfin si je me trompe ou si je ne comprend pas, faites le moi savoir.

En tout cas merci pour vos réactions.

Greg.
Une autre solution (celle que j'utilise), est de faire toi-même le redimensionnement de l'image avec un script (en POO pour ma part) qui garde les proportions de l'image idéales et la tronque si trop grande. Pour ensuite supprimer l'image d'origine.
Modifié par Apoooo (11 Apr 2012 - 08:32)
Est-ce que tu est sur serveur IIS (Windows Server) ?
En quel cas il faut définir le dossier temporaire dans le config de PHP. Je te renvoie à ce commentaire dans la doc de PHP :

a écrit :
For those using PHP on Windows and IIS, you SHOULD set the "upload_tmp_dir" value in php.ini to some directory around where your websites directory is, create that directory, and then set the same permissions on it that you have set for your websites directory. Otherwise, when you upload a file and it goes into C:\WINDOWS\Temp, then you move it to your website directory, its permissions will NOT be set correctly. This will cause you problems if you then want to manipulate that file with something like ImageMagick's convert utility.

http://www.php.net/manual/fr/function.move-uploaded-file.php#86332
Ton message d'erreur parle d'open_basedir qui est une directive du php.ini de ton interprète PHP qui restreint l'accès au différent répertoire ( http://fr.php.net/manual/en/ini.core.php#ini.open-basedir )

Actuellement, ton open_basedir contient ceci (d'après ton message d'erreur)

../.;d:\www\php\htdocs\tmp


Ce qui veut dire que ton script à accès au répertoire

../. 


Attention, ce code n'est pas bon (il me semble), c'est . tout court (open_basedir = .)

Et l'accès à tous les répertoires contenus dans (et qui commencent par "tmp", donc "tmpo" fonctionnerai aussi) :
d:\www\php\htdocs\tmp


Donc si ce que tu cherches à appeller, se trouve en dehors de ces 2 adresses définis dans le open_basedir, ton script n'y aura pas accès.

Et c'est le cas ici, car tu sembles appelé des fichiers venant de ce répertoire

d:\www\cein.be\htdocs


Ce ne sont pas les mêmes !

Donc pour résoudre, en partie (car tu parles de FTP ...), il faudrait que la directive soit écrite ainsi :

open_basedir = d:\www\cein.be\htdocs


Ainsi, tu laisses l'accès complet à PHP pour allez lire tout ce qui se trouve dans ce répertoire et ses sous-répertoires

--------------------------------

Nota: voici quelques exemples pour comprendre les différentes écritures possible et leur résultat :

open_basedir = d:\www\cein.be\htdocs


Accès à :
- d:\www\cein.be\htdocs ainsi qu'à tous ces sous répertoires
- d:\www\cein.be\htdocs ainsi qu'à tous les répertoires commencant par htdocs (htdocs1234567 fonctionne, et serait accessible)


open_basedir = d:\www\cein.be\htdocs\

Accès à :
- Seul ce répertoire serait accessible d:\www\cein.be\htdocs\ et rien d'autre

open_basedir = d:\www\cein.be\htdocs\;d:\www\cein.be\htdocs\tmp\;d:\www\cein.be\htdocs\test

Accès à :
- d:\www\cein.be\htdocs\ accessible (sans les sous répertoires)
- d:\www\cein.be\htdocs\tmp\ accessible (sans les sous répertoires)
- d:\www\cein.be\htdocs\test accessible ainsi que les sous répertoires (modulo de test accessible aussi)

open_basedir = \htdocs\

Accès à :
- Tout chemin comportant le nom htdocs exemple ci-dessous
- d:\www\cein.be\htdocs\tmp\ OK
- d:\www\toto.be\htdocs\ OK
- d:\htdocs\ OK
- d:\www\htdocs\tmp\ OK
- Etc ...

Attention, les exemples montrées ci-dessus ne sont valable que pour WINDOWS, pour tout autre système, le caractère de séparation est ":" (deux points) et non ";" (point virgule). Sous Windows, le séparateur de dossier est backslash "\" alors qu'ailleurs c'est slash "/"
Modifié par Super_baloo8 (10 Apr 2012 - 13:14)