Я пытаюсь запустить скрипт асинхронно.Нет проблем с поиском, как это сделать в Stackoverflow.Проблема в том, что я пробую один из найденных примеров, но он не работает.Скрипты работают без вывода ошибок в error_log.
Мой скрипт main-php:
function backgroundPost($url){
$parts=parse_url($url);
$fp = fsockopen($parts['host'],
isset($parts['port'])?$parts['port']:80,
$errno, $errstr, 30);
if (!$fp) {
return false;
} else {
$out = "POST ".$parts['path']." HTTP/1.1\r\n";
$out.= "Host: ".$parts['host']."\r\n";
$out.= "Content-Type: text/plain\r\n";
$out.= "Content-Length: ".strlen($parts['query'])."\r\n";
$out.= "Content-Length: ".strlen($parts['query'])."\r\n";
$out.= "Connection: Close\r\n\r\n";
if (isset($parts['query'])) $out.= $parts['query'];
fwrite($fp, $out);
fclose($fp);
return true;
}
}
//Example of use
backgroundPost('http://192.168.1.107/smic/testarea/runner.php?id=1');
Ответ от fwrite () - "155".
backgroundPost возвращает значение true.
runner.php:
ignore_user_abort(true);
set_time_limit(50);
error_log("RUNNING!");
Как получается, что «RUNNING!» Записывается в журнал ошибок? Это похоже на то, что скипт фактически не выполняется.
При непосредственном доступе к runner.php (с URL-адресом, размещенным в backgroundPost), скрипт работает должным образом.
Оба скрипта имеют привилегию 777 для apache: apache.
Работает на
- Linux / CentOS 6.2
- PHP 5.3.3
- Apache 2.2.15
Может ли это быть связано с тем, что я использую аутентифицированныйсеанс и аутентифицируемый пользователь, конечно же, не apache, который запускает сценарии?
Тест с CURL
Предложено @jprofitt Я попробовалcurl:
async_curl.php:
$ch = curl_init("http://192.168.1.107/");
$fp = fopen("http://192.168.1.107/smic/testarea/runner.php", "r");
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC ) ;
curl_setopt($ch, CURLOPT_USERPWD, "kaand:xIWGWt0DNVriw");
curl_setopt($ch, CURLOPT_HEADER, true);
curl_setopt($ch, CURLOPT_FILE, $fp);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_exec($ch);
$info = curl_getinfo($ch);
echo print_r($info);
curl_close($ch);
fclose($fp);
Tis печатается из curl_getinfo ($ ch):
Array
(
[url] => http://192.168.1.107/
[content_type] => text/html; charset=UTF-8
[http_code] => 302
[header_size] => 411
[request_size] => 103
[filetime] => -1
[ssl_verify_result] => 0
[redirect_count] => 0
[total_time] => 0.002165
[namelookup_time] => 0.000106
[connect_time] => 0.000192
[pretransfer_time] => 0.000211
[size_upload] => 0
[size_download] => 0
[speed_download] => 0
[speed_upload] => 0
[download_content_length] => 0
[upload_content_length] => 0
[starttransfer_time] => 0.002109
[redirect_time] => 0
[certinfo] => Array
(
)
[redirect_url] => http://192.168.1.107/login.php
)
1
Я сделалпопробуйте с $ ch = curl_init ("http://192.168.1.107/");, а затем я получил сообщение" Требуется авторизация "на моем веб-сайте. В error_log я получаю HTTP / 1.1 401 Авторизация требуется дляrunning.php.
Я также получаю жалобы в error_log о том, что $ fp "не является допустимым ресурсом дескриптора файла" при выполнении curl_setopt ($ ch, CURLOPT_FILE, $ fp); '.
Тамэто перенаправление на страницу входа в конце массива, это может быть связано с этой проблемой?