[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Возможен ли ассинхронный curl запрос
Страницы: 1, 2, 3, 4, 5, 6, 7
linker
MiksIr
Да, но этот цикл не занимается ничем кроме как что проверяет и вызывает и поэтому это кажется быстрым, т.е. асинхронным smile.gif Да хоть прерывания и их обработчики, те же события и их колбеки, только чтобы всё это было асинхронным всё должно работать быстро и ничего не блокировать. Т.е., если мы читаем в цикле что там изменилось в сокетах, то ничего другого мы не должны делать в этом цикле.

_____________
Gear Framework
Gear Framework на Github
SoMeOnE
Этот код на локале правильно работает.
exec("nohup php -q /var/www/domain/fb_post.php action=king access_token={$post['access_token']} userid={$post['userid']} name={$user['name']} >> script_log.txt 2>&1 &");


На сервере не работает. А в script_log.txt много раз записывается (около 300 повторов)
X-Powered-By: PHP/5.4.20
Content-type: application/json
Content-Type: text/html; charset=utf-8

{"success":true}


Хотя в fb_post.php прописал
echo "<pre>";
print_r($argv);
echo "</pre>";
die();


Что происходит. Не совсем сервер. WHM и соот в отдельной спанели работаю с ним.
SoMeOnE
Ну том же домене присутствуют крон задания. Нормально работают.

из-за htaccess может быть ?

# Turn on URL rewriting
RewriteEngine On

# Installation directory
RewriteBase /

# Protect hidden files from being viewed
<Files .*>
Order Deny,Allow
Deny From All
</Files>


# Protect application and system files from being viewed
RewriteRule ^(?:application|modules|system)\b.* index.php/$0 [L]

# Allow any files or directories that exist to be displayed directly
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

# Rewrite all other URLs to index.php/URL
RewriteRule .* index.php/$0 [PT]


killer8080
Цитата (SoMeOnE @ 6.02.2014 - 00:49)
из-за htaccess может быть ?

нет, консольному скрипту до него нет никакого дела, это конфиг апача

Без nohup пробовал? По идее он и сам должен в бэкграунд уйти.
SoMeOnE
Цитата (killer8080 @ 6.02.2014 - 07:14)
Без nohup пробовал? По идее он и сам должен в бэкграунд уйти.

Попробовал, тоже самое. На локале без него тоже работает.
SoMeOnE
В нете пишут про параметр safe_mode в php.ini. Нашел sql.safe_mode (кроме sql ничего не было. наверное другой какой то имеется ввиду) в php.ini off стоят оба значания (Local, Master). На локале тоже самое.
SoMeOnE
На локале и сервере php 5.4
safe_mode уже нету. Вроде до 5.2 только было. Из-за чего еще может быть.
SoMeOnE
Еще момент в том, что допустим элементарный пример типа
echo exec('whoami');
echo exec('pwd');

работает
killer8080
Цитата (SoMeOnE @ 6.02.2014 - 00:43)
На сервере не работает. А в script_log.txt много раз записывается (около 300 повторов)
X-Powered-By: PHP/5.4.20
Content-type: application/jsonContent-Type: text/html; charset=utf-8

{"success":true}

ну видимо твой скрипт выкидывает в поток полученный контент, вместе с заголовками.
А что он должен выводить?
SoMeOnE
killer8080
Вообще ничего. Только пост в фб и все.
killer8080
SoMeOnE
ну видимо на сервере CURLOPT_RETURNTRANSFER установлен в FALSE, потому в поток выбрасывает результат.
А success true это неправильный ответ сервера?
SoMeOnE
killer8080
success true это ответ который не из fb_post.php возвращается. А который в самом основном скрипте где идет передача выполнения данной операции (exec)
там идет работа с базой. При успешном исполнении он контролеру возвращает массив. Контроллер переводит в json и отдает клиенту (мобильному приложению, откуда пришел запрос), что все прошло успешно. По идее в script_log.txt ничего не должно выводиться. На локале не выводится.
fb_post.php тольок курлом постит запись в фб и все. Вот кусок кода оттуда

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,'https://graph.facebook.com/'.$parameters['userid'].'/feed');
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $attachment);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); //to suppress the curl output

$result= curl_exec($ch);

curl_close ($ch);
killer8080
Цитата (SoMeOnE @ 6.02.2014 - 14:47)
success true это ответ который не из fb_post.php возвращается.

а как он тогда в лог попадает? Покажи полное содержимое fb_post.php
SoMeOnE
fb_post.php
Свернутый текст
<?php

$parameters = array();
foreach ($argv as $param) {
$temp = explode('=', $param);
if (count($temp) == 2) {
$parameters[$temp[0]] = $temp[1];
}
}


$action = $parameters['action'];
switch ($action) {
case 'post':
$attachment = array(
'access_token' => $parameters['access_token'],
'name' => $parameters['name'].' - asdasdasd',
'link' => 'https://www.facebook.com/pages/PARKINGaz/{здесь fan_page_id}',
'description' => $parameters['auto_number'],
'picture' => 'http://domain.com/uploads/cars/small/'.$parameters['photo_name'].'',
);


// set the target url
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,'https://graph.facebook.com/'.$parameters['userid'].'/feed');
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $attachment);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); //to suppress the curl output

$result= curl_exec($ch);
curl_close ($ch);

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,'https://graph.facebook.com/{здесь fan_page_id}/feed');
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $attachment);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); //to suppress the curl output

$result= curl_exec($ch);
curl_close ($ch);
break;
case 'comment':
$attachment = array(
'access_token' => $parameters['access_token'],
'message' => $parameters['comment'],
'name' => $parameters['name'].' - asdasdsd',
'link' => 'https://www.facebook.com/pages/PARKINGaz/{здесь fan_page_id}',
'description' => $parameters['auto_number'],
'picture' => 'http://domain.com/uploads/cars/small/'.$parameters['photo_name'].'',
);


// set the target url
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,'https://graph.facebook.com/'.$parameters['userid'].'/feed');
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $attachment);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); //to suppress the curl output

$result= curl_exec($ch);
curl_close ($ch);

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,'https://graph.facebook.com/{здесь fan_page_id}/feed');
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $attachment);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); //to suppress the curl output

$result= curl_exec($ch);
curl_close ($ch);
break;
case 'king':
$attachment = array(
'access_token' => $parameters['access_token'],
'name' => $parameters['name'].' - asdasdasd',
'link' => 'https://www.facebook.com/pages/PARKINGaz/{здесь fan_page_id}',
'description' => $parameters['auto_number'],
'picture' => 'http://domain.com/uploads/cars/small/'.$parameters['photo_name'].'',
);

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,'https://graph.facebook.com/'.$parameters['userid'].'/feed');
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $attachment);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); //to suppress the curl output

$result= curl_exec($ch);
curl_close ($ch);
break;
}


А вот это завершение родительского скрипта с того момента. Все вовзраты основаны на успешном или не успешном добавлении. Или же, если уже есть запись, то не добавляется.
exec("php -q /home/domain/public_html/parking/fb_post.php action=king access_token={$post['access_token']} 
userid={$post['userid']} name={$user['name']} auto_number='{$article['auto_number']}' photo_name={$article['photo_name']} >> script_log.txt 2>&1 &");

}
$report['success'] = true;
} else {
$report['success'] = false;
}
}
else {
$report['success'] = true;
}
return $report;
}
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.