Есть ли у md5_file лимит памяти / тайм-аут для удаленных файлов? - PullRequest
1 голос
/ 02 июля 2010

Я пытался хэшировать содержимое некоторых zip-файлов из удаленного источника с помощью функции PHP md5_file:

md5_file($url);

У меня проблема с парой URL; Я получаю следующую ошибку:

Warning: md5_file($url): failed to open stream: HTTP request failed!

Я думаю это потому, что в этих случаях zip-файлы достаточно велики.

Но пока мне не удалось найти много информации или тематических исследований для хэширования удаленных файлов md5_file, чтобы подтвердить или опровергнуть мою теорию. Кажется, что большинство людей берут файлы и хешируют их локально (что я могу сделать при необходимости).

Так что я полагаю, это действительно из любопытства: есть ли у md5_file какие-то конкретные ограничения на размер удаленных файлов? Есть ли у него тайм-аут, который не позволит загружать файлы большего размера?

Ответы [ 3 ]

0 голосов
/ 06 июля 2010

Некоторые хостинговые среды не позволяют вам получать доступ к удаленным файлам таким способом. Я думаю, что функция MD5 будет работать так же, как и функция file(). Убедитесь, что вы можете получить доступ к содержимому удаленных файлов с помощью этой команды в первую очередь. Если нет, возможно, вы сможете обкатать свой путь к файлу и его содержимому.

0 голосов
/ 12 ноября 2011

Вы можете попробовать set_time_limit(0);, если файл относительно большой, и вы не знаете, сколько времени он будет занимать

0 голосов
/ 02 июля 2010

Вероятно, самое простое решение - установить тайм-аут самостоятельно с помощью:

ini_set('default_socket_timeout', 60);  // 60 secs

Конечно, если эти файлы большие, другой вариант - использовать file_get_contents () , так как вы можете указать ограничение размера файла. Вы не хотите присваивать это значение, так как более эффективно обернуть его так:

$limit = 64 * 1024; // 64 being the number of KB to limit your retrieval
md5(file_get_contents($url, false, null, 0, $limit )); 

Теперь вы можете создавать MD5 из частей файла и не беспокоиться, если кто-то попытается отправить вам файл размером 2 ГБ. Конечно, имейте в виду, что это только MD5 для части файла, если что-то после этого изменится, это сломается. Вам вообще не нужно устанавливать ограничение на размер файла, просто попробуйте так:

ini_set('default_socket_timeout', 60);  // 60 secs
md5(file_get_contents($url));
...