Поэтому я использовал ampps, а затем переключился на z-wamp, думая, что это решит проблему, но это не помогло.
У меня есть отдельные "сайты" на моем локальном хосте (localhost / site1 & localhost /site2) что я пытаюсь отправить несколько запросов curl, но по какой-то странной причине он ничего не делает!Это работает только тогда, когда я делаю один скручивание на один сайт.Это работает:
$ch = curl_init('http://localhost/site1/');
curl_setopt_array($ch, array(
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HEADER => false,
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => array('data' => $data)
));
$res = curl_exec($ch);
//yay!
С другой стороны, это не работает:
...
//add a bunch of curl sessions
//to $this->sessions
...
$window = 15;
if (count($this->sessions) < $window)
$window = count($this->sessions);
$mh = curl_multi_init();
$site_map = array();
for ($i = 0; $i < $window; ++$i) {
curl_multi_add_handle($mh, $this->sessions[$i]);
$site_map[(string) $this->sessions[$i]] = $i;
}
$data_results = array();
$running = null;
do {
$execrun = curl_multi_exec($mh, $running);
} while ($execrun === CURLM_CALL_MULTI_PERFORM);
while ($running && $execrun === CURLM_OK) {
//the loop just keeps going forever from here
if (curl_multi_select($mh) !== -1) {
do {
$execrun = curl_multi_exec($mh, $running);
} while ($execrun === CURLM_CALL_MULTI_PERFORM);
}
if ($execrun !== CURLM_OK)
break;
//to here and never enters the loop below
while ($done = curl_multi_info_read($mh)) {
$output = curl_multi_getcontent($done['handle']);
if ($output)
$data_results[$site_map[(string) $done['handle']]] = $output;
else
$data_results[$site_map[(string) $done['handle']]] = null;
if (isset($this->sessions[$i]) && $i < count($this->sessions)) {
curl_multi_add_handle($mh, $this->sessions[$i]);
$site_map[(string) $this->sessions[$i]] = $i;
++$i;
}
unset($site_map[(string) $done['handle']]);
curl_multi_remove_handle($mh, $done['handle']);
curl_close($done['handle']);
}
}
curl_multi_close($mh);
return $data_results;
Так что в приведенном выше коде multi curl он начинает идти, добавляет дескрипторы к $и, как только он выполнится, он продолжит цикл и никогда не войдет в цикл $ done = curl_multi_info_read ($ mh).Между тем, он все еще работает нормально, а $ running равно 2 за все время.Кроме того, curl_multi_info_read вернет false.Так что это просто продолжает цикл навсегда.
Мое расширение curl включено (очевидно, если одиночный curl работает), и вот подробности этого из PHP Info:
cURL support enabled
cURL Information 7.24.0
Age 3
Features
AsynchDNS Yes
Debug No
GSS-Negotiate No
IDN No
IPv6 Yes
Largefile Yes
NTLM Yes
SPNEGO No
SSL Yes
SSPI No
krb4 No
libz Yes
CharConv No
Protocols dict, file, ftp, ftps, gopher, http, https, imap, imaps, ldap, pop3, pop3s, rtsp, scp, sftp, smtp, smtps, telnet, tftp
Host i386-pc-win32
SSL Version OpenSSL/1.0.0g
ZLib Version 1.2.5
libSSH Version libssh2/1.3.0
Что в мирепроисходит с этой штукой?Может ли это быть что-то с моим конфигом PHP?Конфиг апача?Еще раз, я использую z-wamp.
PHP версия 5.3.10 Apache версия 2.4.1 Win 7 64-bit Добавлен каталог PHP в PATH
Редактировать Оказывается, это должна быть какая-то проблема типа конфигурации Apache / PHP, которую я вообще не могу обнаружить, потому что я покончил с z-wamp и установил wampserver, и на этот раз это сработало.