2010-07-12 4 views
2

J'ai lu le manuel que filesize() est capable de calculer la taille du fichier à distance. Cependant, lorsque j'essaie de le faire avec un extrait ci-dessous. Je suis erreur PHP Warning: filesize(): stat failed for http://someserver/free_wallpaper/jpg/0000122_480_320.jpg in /tmp/test.php on line 5Lire la taille du fichier à distance en utilisant la taille de fichier

Voici mon extrait:

$file = "http://someserver/free_wallpaper/jpg/0000122_480_320.jpg"; 
echo filesize($file); 

Turns, je ne peux pas utiliser le protocole HTTP pour filesize(). Cas proche. Je vais utiliser snippet here comme solution de rechange .

+1

Il y a un raccourci plus court: get_headers ($ file_url, 1) vous donnera un tableau qui aura (espérons-le) une clé "Content-length" dont la valeur est la taille du fichier en octets. – Petruza

Répondre

2

filesize ne fonctionne pas pour HTTP - cela dépend de stat, qui isn't supported for the HTTP(S) protocol.

La page de manuel PHP pour filesize dit:

Refer to List of Supported Protocols/Wrappers for a listing of which wrappers support stat() family of functionality.

Cela ne signifie pas tous les travaux de protocole/wrapper "de la boîte" avec filesize. Vous pouvez toujours contourner cela en effectuant un GET complet de l'URL distante et en calculant la taille des données que vous récupérez. Si vous obtenez un en-tête Content-Length, vous pouvez essayer une requête HEAD pour éviter de transférer les données du fichier.

+0

Ah, d'accord. Je me trompe-lire ce document :(. – ariefbayu

+0

@silent: Mise à jour de ma réponse avec quelques solutions de contournement –

+1

Mise à jour de la question J'ai ajouté un lien de contournement Je vais utiliser – ariefbayu

0

Je ne sais pas où vous avez lu cela. filesize nécessite stat, et basé sur la page HTTP wrapper, je ne pense pas qu'il supporte stat sur n'importe quelle version de PHP.

0

Vous pouvez effectuer une recherche en utilisant http_head(). Je pense que l'extrait que vous référencez télécharge le fichier pour déterminer la taille du fichier, ce qui peut ne pas être nécessaire. Si le serveur Web auquel vous faites référence renvoie des informations d'en-tête précises, vous devriez être en mesure de déterminer la taille du fichier, la date de modification et plusieurs autres caractéristiques d'identification utiles.

4

Vous pouvez obtenir la taille de fichier URL Web en utilisant ci-dessous fonction Code

getFileSize ($ file) {

$ch = curl_init($file); 
    curl_setopt($ch, CURLOPT_NOBODY, true); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
    curl_setopt($ch, CURLOPT_HEADER, true); 
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); 

    $data = curl_exec($ch); 
    curl_close($ch); 
    $contentLength=0; 
    if (preg_match('/Content-Length: (\d+)/', $data, $matches)) { 
     $contentLength = (int)$matches[1]; 

    } 
    return $contentLength; } 
+0

Obtenir des nombres différents ... pouvez-vous expliquer pourquoi? ? ... ie: '$ ch = curl_init ('http://www.ehow.co.uk/ui/en-gb/ehow.png'); /// sorties: 11402' et' $ ch = curl_init ('http://www.ehow.co.uk/ui/fr-fr/ehow.pngjavascript:alert(1);');//Sortie: 45821' et '$ ch = curl_init (' http: // www.ehow.co.uk/ui/en-gb/wrong_path_/ '); // sorties: 45820' et '$ ch = curl_init (' http://www.ehow.co.uk/ui/ '); sorties: 233' ..... Cela rend difficile de savoir quel numéro signifie quoi ... plus, difficile ** à lire correctement la taille du fichier à distance ** .... Une idée? – ErickBest

Questions connexes