file_get_contents не ждет - PullRequest
       1

file_get_contents не ждет

2 голосов
/ 04 октября 2011

Я использую вызов PHP для службы REST для извлечения информации из базы данных XML eXist, запуска на локальном хосте, захвата результатов с помощью file_get_contents() и использования этих результатов для заполнения раскрывающегося списка в форме запроса.,Я думал, что file_get_contents() должен был автоматически ждать полных результатов, но, очевидно, это не так;иногда список полностью заполнен, а иногда урезан.Усечение происходит в разных местах, и перезагрузка страницы (перезапуск PHP и, следовательно, вызов REST) ​​обычно исправляет это, хотя иногда это происходит не с первой попытки.

Если я правильно диагностировал проблему какдело file_get_contents() не дожидаясь результатов, может кто-нибудь посоветовать мне как это исправить?Или есть альтернативное объяснение?Вот соответствующий фрагмент из PHP:

$getPersonNamesQuery = <<< EOQ1
{for \$i in doc('/db/genealogy/genealogy.xml')//person[not(.//firstName eq "unknown")]
    order by string-join(\$i/name/*," ")
    return
        {normalize-space(concat(
        \$i/name/firstName,
        " ",
        if (\$i/name/epithet) then concat("â",\$i/name/epithet,"â) else "",
        " ",
        \$i/name/patronymic," ",
        if (not(\$i/@origin eq "Rus'" or \$i/@origin eq "unknown")) then concat("of ",\$i/@origin) else ""
        ))}
    }
EOQ1;
$contents = "http://localhost:8080/exist/rest/db/genealogy?_howmany=10000&_wrap=no&_query=" . urlencode($getPersonNamesQuery);
$personNames = file_get_contents($contents);

Спасибо,

Дэвид

1 Ответ

1 голос
/ 21 ноября 2012

То же самое случилось со мной, я использовал http_build_query для построения строки запроса, и результат file_get_contents и cURL оба отвечали преждевременно. Передача полной строки запроса без http_build_query в обеих функциях привела к успеху. Weird!

В результате получаются усеченные данные:

$pUrl=array('username'=>'_username_',
            'variable'=>'value',
            'variable2'=>'value2',
            'variable3'=>'value3');
$cURL=http_build_query($pUrl);
print_r(file_get_contents("http://www.example.com/api/?$cURL"));

Это возвращало полные данные каждый раз:

print_r(file_get_contents("http://www.example.com/api/?username=_username_&variable=value&...."));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...