0

たまたまpastebinでホストされているリモートファイルに依存するPHPコードのビットに取り組んでいます。私が取り組んでいるサーバーでは、必要な機能がすべて有効になっています。これをFILE_URLsetで実行するとhttp://google.com、期待される結果が返されます。php.iniまた、追加の対策のために確認しました。

すべてが機能するはずですが、機能しません。file()のように形成された URLを呼び出すとhttp://pastebin.com/raw.php?i=<paste id here>、500 サーバー エラーが返されます。ローカルまたは google.com でホストされているまったく同じファイルに対して同じことを行うと、妥当な結果が返されます。

URL が正しい値に設定されていることを確認し、リモート ページがあると思われる場所にあることを確認しました。私は途方に暮れています。

ini_set("allow_url_fopen", true);
// Prefer remote (up-to-date) file, fallback to local file
if( ini_get("allow_url_fopen") ){
    $file = file( FILE_URL );
}
if(!isset( $file ) || !$file ) {
    $file = file( LOCAL_FILE_PATH );
}
4

2 に答える 2

1

これをテストすることはできませんでしたが、curl を使用して、次のようにしてみてください。

<?php
$url = "http://pastebin.com/2ZdFcEKh";
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_exec($ch);
于 2012-12-29T02:58:13.577 に答える
1

Pastebin は、「ボットのような」リクエストを発行する IP アドレスを自動的にブロックする保護システムを使用しているようです。

あなたの例の場合、file()コマンドが完了しないため(保護システムが接続を閉じないため)、500サーバーエラーが発生し、呼び出しにタイムアウト機能がありません。file()このスクリプトは、通常のブラウザが通過するすべての標準 HTTP ヘッダーを通過しないため、おそらく「ボットのようなもの」と見なされます。

この問題を解決するには、cURLを調べて、スクリプトへのアクセスを許可する開始点としてブラウザー ユーザー エージェントを設定することを検討することをお勧めします。また、これが Pastebin ユーザー契約の違反と見なされるかどうかを調査することは、あなたの利益になることにも言及しておく必要があります。FAQでスクリプトの使用に関する言及は見当たりませんが(2012/12/29 の時点)、彼らは何らかの理由でスクリプトに対する保護をインストールしています。

于 2012-12-29T03:04:28.543 に答える