PHP Curl 扩展不工作

发布于 2024-11-11 16:05:17 字数 1728 浏览 0 评论 0原文

我写了一篇文章,当我在本地主机上尝试时,它可以正确地为我获取数据。它在另一台服务器上也运行良好。但是当我将其传输到服务器时,它显示一条警告消息...

警告:(null)(): 4 不是第 0 行未知中的有效 cURL 句柄资源

任何人都可以建议我必须在 .htacess 中进行哪些更改以及我需要在控制面板中进行更改...

这是我正在使用的代码片段。

function multiRequest($data, $options = array()) {

  // array of curl handles
  $curly = array();
  // data to be returned
  $result = array();

  // multi handle
  $mh = curl_multi_init();

  // loop through $data and create curl handles
  // then add them to the multi-handle
  foreach ($data as $id => $d) {
$curly[$id] = curl_init();

$url = (is_array($d) && !empty($d['url'])) ? $d['url'] : $d;
curl_setopt($curly[$id], CURLOPT_URL,            $url);
curl_setopt($curly[$id], CURLOPT_HEADER,         0);
curl_setopt($curly[$id], CURLOPT_RETURNTRANSFER, 1);

// post?
if (is_array($d)) {
  if (!empty($d['post'])) {
    curl_setopt($curly[$id], CURLOPT_POST,       1);
    curl_setopt($curly[$id], CURLOPT_POSTFIELDS, $d['post']);
  }
}

// extra options?
if (!empty($options)) {
  curl_setopt_array($curly[$id], $options);
}

curl_multi_add_handle($mh, $curly[$id]);
  }

  // execute the handles
  $running = null;
  do {
    curl_multi_exec($mh, $running);
  } while($running > 0);

  // get content and remove handles
  foreach($curly as $id => $c) {
    $result[$id] = curl_multi_getcontent($c);
    curl_multi_remove_handle($mh, $c);
  }

  // all done
  curl_multi_close($mh);

  return $result;
}

for ($i=0;$i<$length;$i++){
$no = $start + $i;
$data[$i]['url']  = 'http://abc.php';
$data[$i]['post'] = array();
$data[$i]['post']['regno']   = $no;
}

$r = multiRequest($data);

// the I have a code to use the $r (result array obtained)

谢谢

I wrote a piece which was fetching data for me correctly when I was trying it on my localhost. Its also working fine on another server. But when I transferred it to server it is showing a warning msg...

Warning: (null)(): 4 is not a valid cURL handle resource in Unknown on line 0.

Can anyone suggest what changes I have to make in .htacess and where I need to go in control panel to make the changes...

Here is the piece of code that I am using.

function multiRequest($data, $options = array()) {

  // array of curl handles
  $curly = array();
  // data to be returned
  $result = array();

  // multi handle
  $mh = curl_multi_init();

  // loop through $data and create curl handles
  // then add them to the multi-handle
  foreach ($data as $id => $d) {
$curly[$id] = curl_init();

$url = (is_array($d) && !empty($d['url'])) ? $d['url'] : $d;
curl_setopt($curly[$id], CURLOPT_URL,            $url);
curl_setopt($curly[$id], CURLOPT_HEADER,         0);
curl_setopt($curly[$id], CURLOPT_RETURNTRANSFER, 1);

// post?
if (is_array($d)) {
  if (!empty($d['post'])) {
    curl_setopt($curly[$id], CURLOPT_POST,       1);
    curl_setopt($curly[$id], CURLOPT_POSTFIELDS, $d['post']);
  }
}

// extra options?
if (!empty($options)) {
  curl_setopt_array($curly[$id], $options);
}

curl_multi_add_handle($mh, $curly[$id]);
  }

  // execute the handles
  $running = null;
  do {
    curl_multi_exec($mh, $running);
  } while($running > 0);

  // get content and remove handles
  foreach($curly as $id => $c) {
    $result[$id] = curl_multi_getcontent($c);
    curl_multi_remove_handle($mh, $c);
  }

  // all done
  curl_multi_close($mh);

  return $result;
}

for ($i=0;$i<$length;$i++){
$no = $start + $i;
$data[$i]['url']  = 'http://abc.php';
$data[$i]['post'] = array();
$data[$i]['post']['regno']   = $no;
}

$r = multiRequest($data);

// the I have a code to use the $r (result array obtained)

Thanks

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

ゞ记忆︶ㄣ 2024-11-18 16:05:17

这并不意味着 cURL 扩展不起作用,恰恰相反。 CURL 正在工作,但是当您尝试访问传递给curl 的选项时,您没有传递curl 资源处理程序。

例如,

 $ch = curl_init(); 
 curl_setopt($ch, CURLOPT_URL, $url); 

您需要使用 $ch 作为您的处理程序,我想您没有这样做?

附带说明一下,如果未安装curl,您会得到一个异常。除非你将它包装在 try catch/function 中。

That doesn't mean that the cURL extension isn't working, quite the opposite. CURL is working, however when you are trying to access the options which you pass to curl, you aren't passing the curl resource handler.

For example,

 $ch = curl_init(); 
 curl_setopt($ch, CURLOPT_URL, $url); 

You need to use the $ch as your handler, which I imagine you are not doing?

As a side note, if curl wasn't installed, you would get an exception. Unless you are wrapping it in try catch/function exist.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文