web-dev-qa-db-ja.com

URLコンテンツを取得PHP

URLのコンテンツを文字列に入れて処理します。しかし、問題があります。

私はこのエラーを受け取ります:

Warning: file_get_contents(http://www.findchips.com/avail?part=74ls244) [function.file-get-contents]: failed to open stream: Redirection limit reached,

これは、ページ保護とヘッダー、Cookie、その他が原因だと聞いています。どうすれば上書きできますか?

また、fopenとともにfreadなどの代替手段も試しましたが、これを行う方法がわからないだけだと思います。

誰でも私を助けてくれますか?

20
Amir Tugi

1)ローカルな最も簡単な方法

<?php
echo readfile("http://example.com/");   //needs "Allow_url_include" enable
//OR
echo include("http://example.com/");    //needs "Allow_url_include" enabled
//OR
echo file_get_contents("http://example.com/");
//OR
echo stream_get_contents(fopen('http://example.com/', "rb")); //you may use "r" instead of "rb"  //needs "Allow_url_fopen" enabled
?> 

2)より良い方法はCURL

echo get_remote_data('http://example.com/?myPage', 'var2=something&var3=blabla' ); // GET & POST request

機能コードはこちら をご覧ください。自動的に処理します[〜#〜] followlocation [〜#〜]問題+リモートURLは自動的に再修正されます! (src="./imageblabla.png" --------> src="http://example.com/path/imageblabla.png"


p.s.GNU/Linuxユーザーはphp5-curl パッケージ。

34
T.Todua

cURL を使用します。

phpinfo();経由で持っているか確認してください

そしてコードについて:

function getHtml($url, $post = null) {
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
    if(!empty($post)) {
        curl_setopt($ch, CURLOPT_POST, true);
        curl_setopt($ch, CURLOPT_POSTFIELDS, $post);
    } 
    $result = curl_exec($ch);
    curl_close($ch);
    return $result;
}
11
Ruel

代わりに cURL を使用してみてください。 cURLはcookie jarを実装しますが、file_get_contentsは実装しません。

3
Roman