1

私は次のコードを持っています:

$url = 'http://' . $host . ':' . $port . $params;
$results = file( $url );

次の例外が発生しています:

file(http://someurl.com/asd/asd): failed to open stream: HTTP request failed! HTTP/1.0 403 Forbidden

しかし、ブラウザーで直接 URL ($url 変数に格納されている) にアクセスすると、完全に正常に動作します。PHP からアクセスしているときに問題が発生するのはなぜですか?

4

1 に答える 1

2

このエラー メッセージ:

HTTP/1.0 403 禁止

...実際には、アクセスしようとしているサーバーから直接来ています。したがって、PHP が外部ファイルにアクセスすることは問題ありません。

代わりに、Web ブラウザにファイルを渡すのと同じように、サーバーに実際にファイルを渡すように説得することがより重要です。

私がチェックするいくつかの問題があります:

  1. ファイルはパスワードで保護されていますか? Web ブラウザは入力したパスワードを保存し、再度パスワードを入力しなくても URL に再アクセスできるようにしますが、PHP はどのパスワードを使用すればよいかわかりません。

  2. サーバーがユーザーエージェント文字列を調べて、ブラウザ以外からのアクセスを制限している可能性がありますか?

  3. 同じサイトの別のページから参照されない限り、サーバーがアクセスを制限している可能性がありますか?

オンラインの HTTP ヘッダー ビューアー ツールを使用して、ファイルを直接要求することもできます。問題を再現できるかどうかを確認するために、さまざまなヘッダー、ユーザー エージェントなどを試すことができます。

私が推測しなければならない場合、私のお金は最初の問題にかかっているでしょう - パスワードが必要です。ただし、実際の URL を知らずに知る方法はありません。


ファイルへのアクセスを妨げているものが何であるかがわかった場合は、http ラッパー、ストリームコンテキスト、特にhttp ストリーム コンテキスト オプションを読んで、不足している情報を PHP から設定する方法を見つけてください。パスワード、ユーザー エージェント、リファラー ヘッダー、または必要な任意のランダム HTTP ヘッダーを指定する方法があります。

于 2013-07-23T07:04:17.083 に答える