Php 无法使用curl\u multi访问字母主机

Php 无法使用curl\u multi访问字母主机,php,laravel,curl,request,Php,Laravel,Curl,Request,我在处理Laravel5.5和php7时遇到了非常奇怪的问题。 当我只使用单连接时,这个curl函数没有任何问题: function getSslPage($url) { $ch = curl_init(); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); curl_setopt($ch, CURLOPT_RET

我在处理Laravel5.5和php7时遇到了非常奇怪的问题。 当我只使用单连接时,这个curl函数没有任何问题:

    function getSslPage($url) {
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
    curl_setopt($ch, CURLOPT_URL, $url);    
    $result = curl_exec($ch);
    curl_close($ch);
    return $result;
    }
我试图访问本地php文件的信息,多次在同一时间。我将VHOST与apache:server.local一起使用,文件位于该文件夹server.local/request.php中。用上面的旋度函数,它就如我所期望的那样工作

问题是,我必须在另一个函数中使用它,以便使用curl_multi同时获取多个请求,下面是代码:

    foreach($data as $key => $fetch) {  
        $info[$key]['name'] = $fetch->name;
        $info[$key]['url'] = 'http://server.local/request.php?url='.$fetch->url;
    }

$multi = curl_multi_init();
$channels = array();

foreach ($info as $url) {
    $ch = curl_init();
    //curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
    //curl_setopt($ch, CURLOPT_SSL_VERIFYHOST,  2);
    curl_setopt($ch, CURLOPT_URL, $url['url']);
    curl_setopt($ch, CURLOPT_HEADER, true);
    curl_setopt($ch, CURLOPT_VERBOSE, true);
    //curl_setopt($ch, CURLOPT_HTTPGET, 1);
    //curl_setopt($ch, CURLOPT_DNS_USE_GLOBAL_CACHE, false );
    //curl_setopt($ch, CURLOPT_DNS_CACHE_TIMEOUT, 2 );
    //curl_setopt($ch, CURLOPT_PORT, 80);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
    //curl_setopt($ch, CURLOPT_REFERER, $url['url']);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5); 
    curl_setopt($ch, CURLOPT_TIMEOUT, 5); //timeout in seconds

    curl_multi_add_handle($multi, $ch);

    $channels[$url['url']] = $ch;
}

$active = null;
do {
    $mrc = curl_multi_exec($multi, $active);
} while ($mrc == CURLM_CALL_MULTI_PERFORM);

while ($active && $mrc == CURLM_OK) {
    if (curl_multi_select($multi) == -1) {
        continue;
    }
    do {
        $mrc = curl_multi_exec($multi, $active);
    } while ($mrc == CURLM_CALL_MULTI_PERFORM);
}

$i = 0;
dd($channels);
foreach ($channels as $channel) {
    $info[$i]['data'] = curl_multi_getcontent($channel);
    curl_multi_remove_handle($multi, $channel);
    $i++;
}

curl_multi_close($multi);
因此,我尝试了curl_setopt中的所有组合,包括注释行和未注释行。什么都没用!它工作的唯一方法是将request.php放在主web目录中,并将server.local更改为127.0.0.1。我甚至试着申请“真实工作”网站,但还是一无所获

我在dd中收到的代码($channels);这是:

array:1 [▼
  "http://server.local/request.php" => curl resource @276 ▼
    url: "http://server.local/request.php"
    content_type: null
    http_code: 0
    header_size: 0
    request_size: 0
    filetime: -1
    ssl_verify_result: 0
    redirect_count: 0
    total_time: 0.0
    namelookup_time: 0.0
    connect_time: 0.0
    pretransfer_time: 0.0
    size_upload: 0.0
    size_download: 0.0
    speed_download: 0.0
    speed_upload: 0.0
    download_content_length: -1.0
    upload_content_length: -1.0
    starttransfer_time: 0.0
    redirect_time: 0.0
    redirect_url: ""
    primary_ip: ""
    certinfo: []
    primary_port: 0
    local_ip: ""
    local_port: 0
  }
]

就协议而言,在request.php中,我只有一个Hello World。。。请求在浏览器加载中返回“helloworld”,甚至在terminalcurl请求中也返回“helloworld”。我不知道我做错了什么?请帮助:/

考虑使用哪个确实使用
cURL
(如果有的话),但可以避免执行多重执行时的细微差别。我读过,但我更喜欢cURL,我认为我对它有更多的控制。公平地说,但你对用C编写CGI程序有更多的控制权(cURL也是一个本机库)与PHP不同的是,在某种程度上,为了快速开发和更少出错的代码,我们都牺牲了低级控制。这超出了我的能力:/apokryfos只是强调,为了易于实现,我们牺牲了控制。他并不是说您应该用C编写实现。