[EDIT]executer une commande unix de php

Eléphant du PHP | 288 Messages

08 sept. 2009, 18:10

Bonjour à tous,

Un petit soucis, filesize avec fichier de plus de 2Go retourne pas la taille de mon fichier. Ceci est normal vue que le type entier de PHP est signé, il supporte donc les fichiers de moins de 2 Go. Pour palier à cela j'essaye d'exécuter une commade shell sur unix pour avoir la taille du fichier mais j ai cette erreur qui apparait.

Je fais ca :
      $out = shell_exec(' du -sk'.$filename);
Et l'erreur
Warning: shell_exec() [function.shell-exec]: Cannot execute using backquotes in Safe Mode in
J'ai regardé mon phpinfo et safe_mode est on en local value mais off en Master value, J'ai donc rajouté
      ini_set('safe_mode', 'Off');
      $out = shell_exec(' du -sk'.$filename);
et j'ai toujours l'erreur.

Quelqu'un aurait une idée?

Merci d'avance


[*EDIT] Si un moderateur passe par la priere de déplacer ce topic dans php avancé ou débutant selon votre jugement du probleme. je viens de me rendre compte j'ai posté dans POO. desole[/EDIT]

ViPHP
ViPHP | 4674 Messages

08 sept. 2009, 21:08

Hey :-),

Attention, la directive safe_mode sera supprimée à partir de PHP 6.
Sinon, sur cette page : http://php.net/safe_mode, on apprend aussi que la directive safe_mode est uniquement modifiable par le système, donc pas avec un simple appel à ini_set() :-).
« Un handicap est le résultat d'une rencontre entre une déficience ou différence et une incapacité de la société à répondre à celle-ci. »

Hoa : http://hoa-project.net (sur @hoaproject).

Eléphant du PHP | 288 Messages

08 sept. 2009, 22:40

Merci pour l'info,

J'ai déjà changé dans mon php.ini la valeur a off. Dans phpinfo dans la colonne Master value elle est a off mais pas dans local value. Je fais comment pour changer dans cette colonne?

Merci encore

ViPHP
ViPHP | 4674 Messages

08 sept. 2009, 23:05

T'as pensé à redémarrer Apache ?
« Un handicap est le résultat d'une rencontre entre une déficience ou différence et une incapacité de la société à répondre à celle-ci. »

Hoa : http://hoa-project.net (sur @hoaproject).

Eléphant du PHP | 288 Messages

08 sept. 2009, 23:42

oui oui ca été fais mais Local value est pas affecté.

J'ai lu que cette valeur est affecté par httpd.conf, .htaccess, et ini_set, c'est pour ca j'ai essayé ini_set avant d'aller faire des modifs en dure mais je vais voir si je peux modifier mon httpd.conf pour voir. Je crois que phpinfo prenais sa config que dans php.ini je savais pas que httpd.conf aussi rentrait en compte. Bref j'ai lu ca ici http://www.developpez.net/forums/d51053 ... ter-value/.

ViPHP
ViPHP | 5924 Messages

09 sept. 2009, 01:27

Oui, lorsque php est chargé en tant que module apache, la configuration est modifiable par des directives php_value, php_flag, php_admin_value, php_admin_flag dans la configuration apache.

Eléphant du PHP | 288 Messages

09 sept. 2009, 08:28

Merci de la précision sekil.

J'ai ajouté ceci dans mon httpd.conf et ca toujours rien changer

Code : Tout sélectionner

<IfModule mod_php5.c> php_admin_flag safe_mode Off </IfModule>
J'ai bien sur redémaré apache.

ViPHP
ViPHP | 5924 Messages

09 sept. 2009, 09:28

Et sans le IfModule ?

Eléphant du PHP | 288 Messages

09 sept. 2009, 16:12

Désolé du délais,

Y a 6h entre nous je crois :) . Je ne pourrais pas tester avant un bout car j'ai des gens qui utilise le système en ce moment. Par contre j'ai regardé dans le fichier de config d'apache et je trouve rien qui ressemble à cette ligne

Code : Tout sélectionner

LoadModule php5_module libexec/libphp5.so
Si php est compilé en tant que module apache je devrais retrouver cette ligne non? J'ai php5.

Pour revenir à mon problème initial, est-ce qu'il y aurais une autre solution que lancer une commande shell pour avoir la taille d'un fichier de plus de 2Go? J'ai essayé d'ouvrir le fichier déplacer le pointeur de fichier à la fin et avec
ftell

estimer la taille mais
fopen 
n'aime pas plus les fichiers de plus de 2Go. Toute idée serait la bienvenue.

Merci encore

ViPHP
ViPHP | 5924 Messages

09 sept. 2009, 16:33

Pour revenir à mon problème initial, est-ce qu'il y aurais une autre solution que lancer une commande shell pour avoir la taille d'un fichier de plus de 2Go? J'ai essayé d'ouvrir le fichier déplacer le pointeur de fichier à la fin et avec
ftell

estimer la taille mais
fopen 
n'aime pas plus les fichiers de plus de 2Go.
C'est à dire ?
Il te met une erreur ?

Eléphant du PHP | 288 Messages

09 sept. 2009, 16:46

Voilà comment je procède
                $filename = "13.rar"; //fichier de 4Go situe au meme niveau dont le path est bon
                $a = fopen($filename, 'r');
		fseek($a, 0, SEEK_END);
		$out = ftell($a);
		fclose($a); 
		var_dump($out);
La sortie
int(0)
Aucune erreur

ViPHP
ViPHP | 2287 Messages

09 sept. 2009, 17:06

Bonjour,

Une question bête : as-tu pensé à regarder la page de manuel de filesize() ( http://fr.php.net/manual/fr/function.filesize.php ) ? Elle mentionne une solution à ton souci (à base de sprintf() ) dans un encadré blanc ;)
if(!@work()){ Nespresso(); } else { what(); }
______________________________

Eléphant du PHP | 288 Messages

09 sept. 2009, 17:51

Bonjour,

Une question bête : as-tu pensé à regarder la page de manuel de filesize() ( http://fr.php.net/manual/fr/function.filesize.php ) ? Elle mentionne une solution à ton souci (à base de sprintf() ) dans un encadré blanc
Yep j'ai essayé et elle ne fonctionne pas plus :( .

ViPHP
ViPHP | 2287 Messages

09 sept. 2009, 18:44

Aïe, pas de chance.

Sinon dans la même page, dans les commentaires utilisateurs, il y a un demi-trillion de personnes qui ont eu semble t-il le même souci que toi et ont posté leurs codes. Tu n'aurais vraiment pas de chance si tu n'en trouves pas un qui fait ce que tu veux dans le tas amha :wink:
if(!@work()){ Nespresso(); } else { what(); }
______________________________

Eléphant du PHP | 288 Messages

09 sept. 2009, 19:40

Ouais,

Il y a beaucoup de solution j'ai essayé,

Tout ce qui lance des commandes externes, j'y arrive pas parce que dans phpinfo safe_mode est à on dans la colonne Local value et j'arrive pas à la changer. J'ai essayé dans le php ini rien, dans httpd.conf rien et je me suis rendu compte que j'étais pas compilé comme un module apache vue que je ne vois null part ou le module php est chargé.

Et pour les autres solutions le type int signé de php me restraint toujours.

Voilà ou j'en suis ceci dit si quelqu'un saurait comment changer la valeur de safe_mode dans la colonne local value bien je serais comblé :D. Je crois une fois le tout fini je ferais un résumé sur les difficultés rencontrées et les solutions trouvées dans la partie contribution parce que pour télé verser des fichiers de plus de 2 Go y a beaucoup à tenir en compte alors qu'un simple uploade c'est facile.

Merci encore