我编写了以下函数,该代码是我在其他地方使用的代码,并进行了少许修改以用作函数(在函数参数中使用$ url):
function curl2str($url) {
$cURL = curl_init($url);
curl_setopt($cURL, CURLOPT_RETURNTRANSFER, true);
curl_setopt($cURL, CURLOPT_CONNECTTIMEOUT, 5);
$data = curl_exec($cURL);
curl_close($cURL);
return $data;
}
Run Code Online (Sandbox Code Playgroud)
我只希望一个函数将URL返回到字符串中,以实现快速简便的API。我传递的URL是有效的,当我将其放入浏览器时可以正常工作。我这样称呼它:
<?=curl2str("**valid URL here**");?>
由于某种原因,它只是返回false。我究竟做错了什么?
更新
当我将此问题URL放入as时$url,得到响应。但是,当我使用自定义URL(在浏览器中可以正常工作)并且仅在目录中显示文件列表时,我会得到bool:false。
更新2 似乎任何域都可以正常工作,除了我尝试访问的域。碰巧这是同一服务器上的根域,我正在从子域运行此脚本,但是由于basedir_restrictions的原因,我无法从子域访问文件夹。因此,我写了一些php来获取文件夹的内容,并将其作为序列化数组(未安装JSON)输出到浏览器。但是我根本无法从该根域得到任何答复。它在浏览器中可以正常工作,但在cURL中却不能。在cURL中,其他所有东西都可以正常工作。
:(
将此代码尝试到您的函数中:
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HEADER, true);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$result = curl_exec($ch);
if(curl_errno($ch))
echo 'Curl error: '.curl_error($ch);
curl_close ($ch);
Run Code Online (Sandbox Code Playgroud)
注意:curl_errno($ch);如果cURL发生任何错误,则返回错误号> 0,并用于curl_error($ch);查看cURL的错误是什么。
我使用这个功能:
function curl($url, $cookie = false, $post = false, $header = false, $follow_location = false, $referer=false,$proxy=false)
{
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_FAILONERROR, true);
curl_setopt($ch, CURLOPT_REFERER, $referer);
curl_setopt($ch, CURLOPT_HEADER, $header);
curl_setopt($ch, CURLOPT_PROXY, $proxy);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, $follow_location);
if ($cookie) {
curl_setopt ($ch, CURLOPT_COOKIE, $cookie);
}
if ($post) {
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post);
}
$response = curl_exec ($ch);
curl_close($ch);
return $response;
}
Run Code Online (Sandbox Code Playgroud)