- Trouver la taille d'un fichier distant [ PHP ] - PHP - Programmation
Marsh Posté le 15-04-2002 à 15:18:59
>> Explorer le fait bien alors pq pas php !
ie le sait car il commence à downloader le fichier :
GET répertoire/fichier.ext HTTP/1.0
Host: www.server.com
et le serveur répond :
HTTP/1.0 200 OK
Content-Length: 45787
et hop. tu peux ouvrir une socket, faire une requête HTTP, et lire suffisamment d'octets (~512) pour avoir le champ qui spécifie la taille.
Marsh Posté le 15-04-2002 à 15:26:31
http://www.php.net/manual/en/function.fsockopen.php
-> regarde l'exemple.
(y'a aussi http://www.php.net/manual/en/ref.sockets.php pour de la comm plus générale).
Marsh Posté le 15-04-2002 à 15:45:55
Meric j'ai mattez cette doc mais je suis pas assez bon pour tout comprendre... si c pas trop demander tu pourrais me faire un ptit exemple pour avoir la taille du fichier???
merci..
Marsh Posté le 15-04-2002 à 15:50:14
1) tu recopies l'exemple
2) tu remplaces le nom du serveur, le nom du fichier par ton serveur, ton fichier
3) au lieu de faire un while (!feof(...)) + fgets(...) pour récupérer le fichier, tu fais un fgets(..., 512) (512 = par exemple)
4) tu affiches ce que tu obtiens
5) séparés par des retours à la ligne (\r\n), tu auras les lignes du header
6) sur une de ces lignes, le champ Content-Length
7) pour l'extraire, tu peux utiliser strstr("Content-Length" )
8) tu extrais ça avec la méthode de ton choix (eplode, regexp, etc.)
Marsh Posté le 15-04-2002 à 16:05:52
<?php
$fp = fsockopen ("www.francozone.com", 80, $errno, $errstr, 30);
$fichier = "http://www.francozone.com/pictures/francologo.jpg";
if (!$fp) {
echo "$errstr ($errno)<br>\n";
} else {
fputs ($fp, "GET / HTTP/1.0\r\nHost: www.example.comrnrn" );
fgets($fichier, 512)
fclose ($fp);
}
?>
jai fait ca mais parse error at line 9
je comprend pas trop comment recuperer la taille du fichier avec ca...
Marsh Posté le 15-04-2002 à 16:07:05
pourle parse error ct un ; manquant mais now jai ca
Warning: Supplied argument is not a valid File-Handle resource in /u/ipmedia/MULTI/netsexy/public_html/test.php on line 8
Marsh Posté le 15-04-2002 à 16:11:31
* tu dois spécifier dans le GET le chemin du fichier
fputs ($fp, "GET /pictures/francologo.jpg HTTP/1.0\r\nHost: www.example.comrnrn" );
dans l'exemple, / renvoie le fichier par défaut situé à la racine du site.
* fgets($fichier, 512)
non. relis l'exemple, tu dois passer $fp à fgets(), qui renvoie le buffer qu'il a lu.
$fichier = fgets($fp, 512);
* ton affectation $fichier = .... au début ne sert à rien.
Marsh Posté le 15-04-2002 à 16:16:53
Je dois etre con car je comprends de moins en moins...
pourrais tu m'ecrire le script comme il faut??? car je galere grave la sinon tant pis j'abandonne
merci k meme
Marsh Posté le 15-04-2002 à 16:21:25
je n'ai pas dit grand chose d'autre que "remplace ça par ça", alors ... va dormir et remets-toi là-dessus demain.
Marsh Posté le 15-04-2002 à 16:22:24
c pas ca mais la plupartdes commande utiliser je les connais pas je c pas koi fait koi je suis un peu perdu c tt j'y arrive pas tant pis a+
Marsh Posté le 15-04-2002 à 16:33:55
raaaah ! c'est pourtant pas bien compliqué ! si qq chose te bloque, cherche !
<?php
$fp = fsockopen ("www.francozone.com", 80, $errno, $errstr, 30);
$buffer = '';
if (!$fp) {
echo "$errstr ($errno)<br>\n";
} else {
fputs ($fp, "GET /pictures/francologo.jpg HTTP/1.0\r\nHost: www.example.comrnrn" );
$buffer = fgets($fp, 512)
fclose ($fp);
// là tu as les headers http dans $buffer
echo $buffer;
// tu devrais voir un champ Content-Length à l'écran.
// il suffit juste d'extraire la valeur située après le champ ...
}
?>
Marsh Posté le 15-04-2002 à 16:44:09
Pour toi c super simple pour moi c compliquer jai jamais toucher a ce genre de methodes...
chercher c'est ce que je fait depuis 3 heures
bref merci ... et a+
Marsh Posté le 15-04-2002 à 16:46:49
Ca dit ceci : HTTP/1.1 404 Not Found
pourtant l'image existe
Marsh Posté le 15-04-2002 à 16:46:57
SquiiiD a écrit a écrit : Pour toi c super simple pour moi c compliquer jai jamais toucher a ce genre de methodes... |
le truc rigolo, c'est que je n'ai _jamais_ utilisé fsockopen() ou fgets() !
(mais ok, je m'y connais en http )
Marsh Posté le 15-04-2002 à 16:48:14
c t le www;exemple.com ki foirait jai rempalcer et ca va mais maintnant je vosi ca :
HTTP/1.1 200 OK
ou se trouve la taille?
Marsh Posté le 15-04-2002 à 16:55:44
haaa au temps pour moi fgets() lit ligne par ligne
remplace
$buffer = fgets($fp, 512);
par
$buffer = fread($fp, 512);
Marsh Posté le 15-04-2002 à 16:58:00
bon ben nickel ca marche...
desolé de tavoir ennuyé.. a+ et merci encore
Marsh Posté le 15-04-2002 à 15:10:51
Bonjour je voudrais savoir s'il est possible de faire un script qui arrive a voir la taille d'un fichier stocké sur un autre serveur! Explorer le fait bien alors pq pas php !
filesize() a marche po.
Y a t'il d'autres solutions??
Merci