Не истекло ли время ожидания PHP или что-то еще вызывает изменение результатов моего скрипта после каждого выполнения? - PullRequest
0 голосов
/ 14 сентября 2010

У меня есть каталог, полный файлов XML. Для каждого из этих файлов я делаю поиск в RIPE . Для каждого поиска я делаю пару запросов RegEx по возвращенному HTML-коду. Но после нескольких циклов file_get_contents перестает возвращать данные, и все мои операции после выполняются с пустой строкой.

Я подумал, что PHP может зависать, так как загрузка этих страниц занимает некоторое время. Но не будет ли выполнение сценария полностью остановлено? Вместо этого все циклы завершаются и выводят свой HTML-код, хотя и без содержимого.

Я также предполагаю, что может быть какое-то максимальное количество запросов для второй сделки с PHP.

Может ли кто-нибудь здесь пролить свет на это?

Спасибо


Изменить: Чтобы объяснить мой заголовок, мой друг и я выполняли сценарий одновременно. Вот почему я предполагаю, что PHP устанавливает ограничение на количество запросов, которые он может отправить за минуту или около того, потому что кажется, что PHP управляет различным числом циклов, прежде чем он прекратит возвращать данные.


Редактировать: Добавлен код: (я полагал, что он не нужен, из-за моего объяснения проблемы)

<?php
set_time_limit(0);

include "pagebase.php";

$page = new pagebase();
$page->jQuery = true;
$page->formatDoc = false;
$page->addScript("javascript.js");
$page->addStylesheet("../codeclean.css");
$page->addStylesheet("stylesheet.css");
$page->title = "...";

$directory_path = "xml_documents";

$directory = scandir($directory_path);
$files = array();

foreach($directory as $string)
{
    if(preg_match("/.*\.xml/", $string, $result) > 0)
        array_push($files, $result[0]);
}

$content =
    "
        <table cellpadding=\"0\" cellspacing=\"0\">
            <tr>
                <td colspan=\"7\">
                    <center><h2>...</h2></center>
                </td>
            </tr>
            <tr>
                <td class=\"header_cell\">Case ID</td>
                <td class=\"header_cell\">Description (From RIPE)</td>
                <td class=\"header_cell\">IP</td>
                <td class=\"header_cell\">Fil</td>
                <td class=\"header_cell\">Time</td>
                <td class=\"header_cell\">Type</td>
            </tr>
    ";

foreach($files as $index => $file)
{
    $xml = simplexml_load_file("$directory_path/$file");
    $id = trim($xml->Case->ID);
    $ip = trim($xml->Source->IP_Address);
    $title = trim($xml->Content->Item->Title);
    $time = trim($xml->Source->TimeStamp);
    $type = trim($xml->Source->Type);

    $desc_result = array();
    $info_result = array();

    $RIPE_result = file_get_contents("http://www.db.ripe.net/whois?searchtext=$ip");
    preg_match("/(?<=descr:)(\s*)(.*)/", $RIPE_result, $desc_result);
    preg_match_all("/<pre>.*<\/pre>/sm", $RIPE_result, $info_result);

    $info_result[0] = implode("", $info_result[0]);

    if(count($desc_result) < 1) $desc_result[0] = "<font style=\"color:red\">No description found</font>";
    else $desc_result[0] = trim($desc_result[0]);

    $content .=
        "
            <tr id=\"info_row_$index\">
                <td class=\"info_cell\">$id</td>
                <td class=\"info_cell\">$desc_result[0]</td>
                <td class=\"info_cell\">$ip</td>
                <td class=\"info_cell\">$title</td>
                <td class=\"info_cell\">$time</td>
                <td class=\"info_cell\">$type</td>
            </tr>
            <tr id=\"expanded_row_$index\">
                <td class=\"expanded_cell\" colspan=\"7\">
                    <div id=\"content_container_$index\">
                        <input type=\"button\" class=\"pastey_button\" rel=\"$index\" value=\"Get info\" />
<div id=\"RIPE_$index\">$info_result[0]</div>
                    </div>
                </td>
            </tr>
        ";
}

$content .=
    "
            <tr>
                <td colspan=\"6\">Vi har totalt ".count($files)." henvendelser.</td>
            </tr>
        </table>
    ";

$page->body = $content;
$page->drawPage();
?>

Тестирование встроенных code блоков

Ответы [ 2 ]

0 голосов
/ 14 сентября 2010

Я думаю, что RIPE имеет ограничения использования - вы можете быть заблокированы, если вы выполняете слишком много запросов в течение определенного периода времени.

0 голосов
/ 14 сентября 2010

Если под тайм-аутом вы подразумеваете file_get_contents тайм-аут, я уверен, что это выдаст ошибку (или, по крайней мере, вернет false).Насколько я знаю, у PHP нет количества HTTP-запросов, которые он может выполнить за одно выполнение.

Сколько элементов вы здесь обсуждаете?Вы проверили значения для этих элементов?

Вы можете попробовать использовать set_time_limit(0), но PHP должен выдать ошибку, если PHP достигает максимального времени выполнения, поэтому вам это может не понадобиться.

...