[EDIT]executer une commande unix de php

ViPHP
ViPHP | 5924 Messages

10 sept. 2009, 18:59

Et par ailleurs, je ne vois pas ce que ça change, il uploade par ftp ?

Mammouth du PHP | 985 Messages

10 sept. 2009, 19:07

Je m'étais documenté la dessus quand j'avais fais mon script de téléchargement sur mon site...
Si je ne me trompe pas il faut préciser dans les headers le transfert en mode binaire.
Pour la taille, c'est dans les headers aussi -> calculer la taille du fichier et ensuite insérer la valeur dans le header content_length...
Bref tout ce joue dans les headers, enfin si évidemment c'est possible plus de 2 gigas avec readfile, moi personnellement je n'ai jamais testé :wink:
Face à la roche, le ruisseau l'emporte toujours, non pas par la force mais par la persévérance.

Eléphant du PHP | 288 Messages

10 sept. 2009, 19:33

Pourquoi passer par un service tiers ?
parce qu'avec php j 'arrivais pas à uploader plus de 2 Go alors un applet java m'aidait à contourner le problème.
Et par ailleurs, je ne vois pas ce que ça change, il uploade par ftp ?
J'ai pas trop compris, mais je vais repondre selon ce que j'ai compris. J'utilise le protocole ftp avec mon applet pour uploader. Maintenant quand un usager se connecte il voit les vidéos qui lui ont été envoyé et il doit les télécharger .
Je m'étais documenté la dessus quand j'avais fais mon script de téléchargement sur mon site...
Si je ne me trompe pas il faut préciser dans les headers le transfert en mode binaire.
Pour la taille, c'est dans les headers aussi -> calculer la taille du fichier et ensuite insérer la valeur dans le header content_length...
Bref tout ce joue dans les headers, enfin si évidemment c'est possible plus de 2 gigas avec readfile, moi personnellement je n'ai jamais testé :wink:
Voilà comment je procède
        header('Content-disposition: attachment; filename="' . $titre . '"');
	header('Content-Type: application/force-download');
	header('Content-Transfer-Encoding: binary');
	header('Content-Length: '.$size[4]);
	header('Pragma: no-cache');
	header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
	header('Expires: 0');
	readfile($path);

Pour moins de 2Go ca va mais plus ca marche plus

Mammouth du PHP | 985 Messages

10 sept. 2009, 19:45

Je ne sais pas si cela fonctionne pour plus de 2 gigas, mais moi pour la taille j'ai fais ceci:
header("Content-Length: ".filesize($file));
Face à la roche, le ruisseau l'emporte toujours, non pas par la force mais par la persévérance.

Eléphant du PHP | 288 Messages

10 sept. 2009, 19:51

Non ca marche pas pour plus de 2 Go. J'ai été obligé de lancer une commande shell pour avoir la taille. La taille qui est la est bonne et ca marche pour moins de 2 Go et quand je fais un echo du size c'est le bon. C'est le
readfile
qui pose problème.

Mammouth du PHP | 985 Messages

10 sept. 2009, 20:08

Oui je crois que cela fait parti des inconvénients de l'utilisation de readfile...
Enfin en tout cas, c'était une histoire de taille...
Sinon il faut utiliser alors l'alternative à readfile qui elle fonctionnera surement:
header("Location:".$file);
Face à la roche, le ruisseau l'emporte toujours, non pas par la force mais par la persévérance.

Eléphant du PHP | 288 Messages

10 sept. 2009, 20:52

Ouais j'y avais pensé mais cette solution ne m'arrange pas parce qui si le navigateur à un plugin d'installé qui prend en charge l'extension du fichier alors il va l'ouvrir alors que moi je veux forcer le téléchargement.

Merci quand même.

ViPHP
ViPHP | 5924 Messages

10 sept. 2009, 22:48

J'ai pas trop compris, mais je vais repondre selon ce que j'ai compris. J'utilise le protocole ftp avec mon applet pour uploader. Maintenant quand un usager se connecte il voit les vidéos qui lui ont été envoyé et il doit les télécharger .
mmmh, ok

Euh, pour forcer le téléchargement, les headers, tu peux les passer via la conf de ton serveur apache (?) :
http://httpd.apache.org/docs/2.2/mod/mo ... ation.html

Eléphant du PHP | 288 Messages

10 sept. 2009, 23:50

Oui oui je viens juste de tomber la dessus :) . J'ai rajoute ca

Code : Tout sélectionner

<FilesMatch "\.(wmv|flv|zip|rar|mpg|avi|mov|mp4|mp2|mpeg)$"> ForceType applicaton/octet-stream </FilesMatch>
dans mon httpd.con et ca marche.
Merci encore pour tout.
Je marque resolu

Mammouth du PHP | 985 Messages

11 sept. 2009, 01:03

Et donc juste pour info;
En ajoutant ce header à ton script sans modifier le httpd.conf, cela fonctionne aussi ou pas?
header("Content-Type: application/octet-stream");
Face à la roche, le ruisseau l'emporte toujours, non pas par la force mais par la persévérance.

ViPHP
ViPHP | 4674 Messages

11 sept. 2009, 11:59

Et arrêtez de blâmer readfile, la pauvre …
« 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).

Mammouth du PHP | 985 Messages

11 sept. 2009, 12:08

Et arrêtez de blâmer readfile, la pauvre …
Il est solide, ne t'inquiète pas :wink:
Mais je n'ai toujours pas de réponse à ma question, n'ayant pas de fichier de plus de 2 gigas sur mon PC, je ne peux tester moi-même...
Face à la roche, le ruisseau l'emporte toujours, non pas par la force mais par la persévérance.

ViPHP
ViPHP | 4674 Messages

11 sept. 2009, 13:54

Bah génère le :-).
« 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).

ViPHP
ViPHP | 4039 Messages

11 sept. 2009, 14:00

Bah génère le :-).
Hop, ~= 2.5 Go

Code : Tout sélectionner

dd if=/dev/zero of=grosfichier bs=1k count=2500000
Mais qu'importe. (je suis ici - dernier petit projet)
Berze going social.

Mammouth du PHP | 985 Messages

11 sept. 2009, 15:17

Je ne vais pas tester sur un serveur autre que mon petit hébergement personnel qui n'accepte pas les fichier de plus de 2 gigas.
Bref, sinon:
application/octet-stream -> Fichiers binaires non interprétés -> bin
Associé avec: Content-Transfer-Encoding: binary
A la place de tout autre Content-Type comme le: force-download
Est en quelque sorte logique et surement plus efficace au final...
Et il fort possible que cela règle aussi le problème des 2 gigas...
Donc:
// en spécifiant le cache
header("Expires: 0");
header("Pragma: no-cache");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
// Donc ce header:
header("Content-Type: application/octet-stream");
// Associé avec celui-ci:
header("Content-Transfer-Encoding: binary");
PS: C'est juste une supposition et non une affirmation :wink:
Face à la roche, le ruisseau l'emporte toujours, non pas par la force mais par la persévérance.