md5_file () не работает с удаленным контентом, полученным по URL - PullRequest
4 голосов
/ 02 мая 2010

Вот мой код, относящийся к вопросу:

$theurl = trim($_POST['url']);
    $md5file = md5_file($theurl);
        if ($md5file != '96a0cec80eb773687ca28840ecc67ca1') { echo 'Hash doesn\'t match. Incorrect file. Reupload it and try again'; 

Когда я запускаю этот скрипт, он даже не выдает ошибку. Это просто останавливается. Он загружается немного, а затем просто останавливается.

Далее по сценарию я снова его реализую, и здесь он тоже не работает:

while($row=mysql_fetch_array($execquery, MYSQL_ASSOC)){

$hash = @md5_file($row['url']);

$url = $row['url'];

mysql_query("UPDATE urls SET hash='" . $hash . "' WHERE url='" . $url . "'") or die("There was a problem: ".mysql_error());

        if ($hash != '96a0cec80eb773687ca28840ecc67ca1'){
            $status = 'down';
            }else{
            $status = 'up';
            }
mysql_query("UPDATE urls SET status='" . $status . "' WHERE url='" . $url . "'") or die("There was a problem: ".mysql_error());

            }

И он прекрасно проверяет все URL-адреса, пока не доберется до одного с IP-адресом вместо домена, например:

http://188.72.216.143/~waffle/udp.php

В этом случае сценарий снова загружается немного, а затем останавливается.

Любая помощь будет принята с благодарностью, если вам нужна дополнительная информация, просто спросите.

РЕДАКТИРОВАТЬ: Кажется, работает с некоторыми IP, но не другие

1 Ответ

9 голосов
/ 02 мая 2010

Я думал, что md5_file работает только с локальными файлами. В документации, конечно, не упоминаются запросы или что-то еще. Если вы получили файл вручную, вы можете использовать md5 для вычисления хеша документа. Попробуйте дать ему вихрь.

<?php

    $contents = file_get_contents('http://stackoverflow.com');
    $md5file = md5($contents);

    echo $md5file;

?>
...