2011-10-04 1 views
2

私は、eXist XMLデータベースから情報を取得し、localhost上で実行し、結果をfile_get_contents()でキャプチャし、その結果を使用してクエリのドロップダウンリストを設定するために、RESTサービスへのPHP呼び出しを使用しています形。私はfile_get_contents()が完全な結果を自動的に待つことになっていたと思ったが、明らかにそうではない。リストに完全に入力され、時には切り捨てられることもあります。切り詰めはさまざまな場所で行われ、ページを再読み込みする(PHPを再実行し、したがってREST呼び出しを再実行する)通常は最初の試行ではないが、通常はそれを修正します。私はfile_get_contents()の問題として問題を正しく診断された場合file_get_contents not waft

結果を待っていない、誰もがそれを修正する方法について私に助言することができますか?あるいは別の説明がありますか?ここでは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); 

おかげで、同じことは、私と一緒に起こったデビッド

+2

のfile_get_contents:

$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")); 

これは、完全なデータ毎回返されます。すぐに返ってくるのは、要求されたリソースがすぐに終了したり、接続が早く終了する原因があるからです。 –

+0

すぐに戻ってくるわけではありません。私は完全な結果を得ていない、つまりリターンが(時には)切り捨てられているということです。私が問題を誤診した場合(確かに可能です)、他にどこで説明を探すべきでしょうか? – obdurodon

+0

カールのようなより良い診断を与えるものを使用してください。 file_get_contentsはややモノリシックでデバッグは非常に難しいです。しかし、要するに、それが返すデータが切り捨てられた場合、そのデータやネットワークが切り捨てを引き起こしているからです。 –

答えて

1

、私は、クエリ文字列を構築するためにhttp_build_queryを使用して、とのfile_get_contentsの結果だったとcURLの両方でした早すぎる応答。両方の関数でhttp_build_queryを指定せずに完全なクエリ文字列を渡すと、成功しました。奇妙な!

これは、結果が切り捨てられたデータである。応答を待つん

print_r(file_get_contents("http://www.example.com/api/?username=_username_&variable=value&...."));