$xml_file = file_get_contents(SITE_PATH . 'cms/data.php');
問題は、サーバーのURLファイルアクセスが無効になっていることです。私はそれを有効にすることはできません、それはホスティングのものです。
質問はこれです。 data.php
ファイルはxmlコードを生成します。
上記の方法を実行せずにこれを実行してxmlデータを取得するにはどうすればよいですか?
出来ますか?
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;
}
あなたはこのようなものを試してみてください、私は私のプロジェクトのためにこれをやっています、そのフォールバックシステム
//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....
}
はい。URLラッパーを無効にしている場合は、ソケットを使用するか、さらに良いことに cURL ライブラリを使用する必要があります。
サイトの一部である場合は、Web URLではなくファイルシステムパスで参照します。 /var/www/...
、 のではなく http://domain.tld/...
。
file_get_contents()
なしでURLから生成されたXMLを読み取ろうとしている場合は、おそらく cURL を見たいと思うでしょう。
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
を試してください。うまくいかない場合は、ホスティングプロバイダーを変更してください。
使用可能な場合は、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);