web-dev-qa-db-ja.com

file_get_contentsの代わりに?

$xml_file = file_get_contents(SITE_PATH . 'cms/data.php');

問題は、サーバーのURLファイルアクセスが無効になっていることです。私はそれを有効にすることはできません、それはホスティングのものです。

質問はこれです。 data.phpファイルはxmlコードを生成します。

上記の方法を実行せずにこれを実行してxmlデータを取得するにはどうすればよいですか?

出来ますか?

38
JasonS

cURL を使用します。この関数は、file_get_contentsの代替です。

function url_get_contents ($Url) {
    if (!function_exists('curl_init')){ 
        die('CURL is not installed!');
    }
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $Url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    $output = curl_exec($ch);
    curl_close($ch);
    return $output;
}
109
The Pellmeister

あなたはこのようなものを試してみてください、私は私のプロジェクトのためにこれをやっています、そのフォールバックシステム

//function to get the remote data
function url_get_contents ($url) {
    if (function_exists('curl_exec')){ 
        $conn = curl_init($url);
        curl_setopt($conn, CURLOPT_SSL_VERIFYPEER, true);
        curl_setopt($conn, CURLOPT_FRESH_CONNECT,  true);
        curl_setopt($conn, CURLOPT_RETURNTRANSFER, 1);
        $url_get_contents_data = (curl_exec($conn));
        curl_close($conn);
    }elseif(function_exists('file_get_contents')){
        $url_get_contents_data = file_get_contents($url);
    }elseif(function_exists('fopen') && function_exists('stream_get_contents')){
        $handle = fopen ($url, "r");
        $url_get_contents_data = stream_get_contents($handle);
    }else{
        $url_get_contents_data = false;
    }
return $url_get_contents_data;
} 

その後、このようにすることができます

$data = url_get_contents("http://www.google.com");
if($data){
//Do Something....
}
9
AMB

はい。URLラッパーを無効にしている場合は、ソケットを使用するか、さらに良いことに cURL ライブラリを使用する必要があります。

サイトの一部である場合は、Web URLではなくファイルシステムパスで参照します。 /var/www/...、 のではなく http://domain.tld/...

3
Alin Purcaru

file_get_contents()なしでURLから生成されたXMLを読み取ろうとしている場合は、おそらく cURL を見たいと思うでしょう。

2
Nev Stokes

SITE_PATHについてのコメントが示唆するようにファイルがローカルの場合、スクリプトを実行し、 output control functions を使用して結果を変数にキャッシュするだけです。

function print_xml_data_file()
{
    include(XML_DATA_FILE_DIRECTORY . 'cms/data.php');
}

function get_xml_data()
{
    ob_start();
    print_xml_data_file();
    $xml_file = ob_get_contents();
    ob_end_clean();
    return $xml_file;
}

他の多くの人が言ったようにリモートの場合 curl が道です。存在しない場合は、 socket_create または fsockopen を試してください。うまくいかない場合は、ホスティングプロバイダーを変更してください。

2

使用可能な場合は、curlを使用するのが最適なオプションです。

phpinfo()を実行し、ページでcurlを検索することで、有効になっているかどうかを確認できます。

有効になっている場合、これを試してください:

$curl_handle=curl_init();
curl_setopt($curl_handle, CURLOPT_URL, SITE_PATH . 'cms/data.php');
$xml_file = curl_exec($curl_handle);
curl_close($curl_handle);
0
Alan Geleynse