вот код главного скрипта, именно он вызывается каждые 5 секунд (немного повырезал, оставил только те ветки, кот нужны):
используется framework CodeIgniter
Код: Выделить всё
public function index()
{
$this->db->select('id, name, ns1, ns2, ip, old_ip, old_ns1, old_ns2, do_in_line, order_id, reseller_type');
$this->db->where(array('in_line'=>1));
$this->db->order_by('time_in_line', 'asc');
$q = $this->db->get('domains', 1);
if($q->num_rows() < 1) return;
$out = false;
$domain = $q->row_array();
$this->db->set(array('in_line'=>3));
$this->db->where(array('id'=>$domain['id']));
$this->db->update('domains');
$ch = curl_init();
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); //Don't verify ssl certificate
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 120);
curl_setopt($ch, CURLOPT_TIMEOUT, 120);
curl_setopt($ch, CURLOPT_USERAGENT, 'Opera/9.80 (Windows NT 6.0; U; pl) Presto/2.10.229 Version/11.62');
$url = "http://gate_server.com/cron.php";
$user_name = 'some_user';
$api_key = 'some_key';
$ip = 'some_ip';
$domain_name = $domain['name'];
$zone = explode('.',$domain['name']);
$sld = $zone[0];
if(count($zone)>2)
$tld = $zone[sizeof($zone)-2].'.'.$zone[sizeof($zone)-1];
else
$tld = $zone[sizeof($zone)-1];
$Contact = array(
'FirstName' => 'Sergey',
'LastName' => 'Davidov',
'Address1' => urlencode('Baker str. 23'),
'City' => urlencode('New York'),
'StateProvince' => 'NY',
'PostalCode' => '10023',
'Country' => 'US',
'Phone' => '+1.5323433226',
'EmailAddress' => 'serg_davidov@yahoo.com'
);
$contcts_types = array('Registrant', 'AuxBilling', 'Tech', 'Admin');
switch($domain['do_in_line'])
{
case '1':
$comand = 'namecheap.domains.create';
$request = "ApiUser={$user_name}&ApiKey={$api_key}&".
"UserName={$user_name}&Command={$comand}&".
"ClientIp={$ip}".
"&DomainName={$domain_name}&Years=1";
foreach($contcts_types as $c_type)
{
foreach($Contact as $key=>$value)
$request .= '&'.$c_type.$key.'='.$value;
}
if($this->write_logs)
{
$this->load->helper('file');
write_file('/path/to/logs/cron_1.log', @date("d.m.Y h:i:s").' - request : '.$request."\r\n", "a+");
}
//echo $request;
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POSTFIELDS, $request);
set_time_limit(180);
$out = curl_exec($ch);
//echo $out;
curl_close($ch);
if($out)
{
$this->load->model('billing');
$result = $this->billing->xml2array($out);
if($this->write_logs)
{
echo json_encode($result);
write_file('/path/to/logs/cron_1.log', @date("d.m.Y h:i:s").' + response : '.json_encode($result)."\r\n", "a+");
}
if($result['ApiResponse_attr']['Status'] == 'OK')
{
$CreateResults = $result['ApiResponse']['DomainCreateResult_attr'];
if($CreateResults['Registered'] == 'true')
{
$this->db->set(array('in_line'=>0, 'time_in_line'=>0, 'do_in_line'=>0, 'reg_date'=>time(), 'order_id' => $CreateResults['OrderID']));
$this->db->where(array('id'=>$domain['id']));
$this->db->update('domains');
}
}
}
break;
default:
break;
}
}
вот код гейта, сюда обращается главный скрипт:
в гейте голый php без FW
Код: Выделить всё
<?php
set_time_limit(80);
if($cp = count($_POST))
{
$query = '';
foreach($_POST as $key=>$value)
{
$cp--;
if($cp>0)
$query .= $key.'='.$value.'&';
else
$query .= $key.'='.$value;
}
$ch = curl_init();
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); //Don't verify ssl certificate
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 60);
curl_setopt($ch, CURLOPT_TIMEOUT, 60);
curl_setopt($ch, CURLOPT_USERAGENT, 'Opera/9.80 (Windows NT 6.0; U; pl) Presto/2.10.229 Version/11.62');
$url = "https://somedomain.net/xml.response";
$request = $query;
//echo $request;
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POSTFIELDS, $request);
$out = curl_exec($ch);
curl_close($ch);
echo $out;
//print_r(json_decode($out,true));
}
else
die('It\'s work');
?>
Kopilov писал(а): ↑30.05.2012 16:17
Сравните вывод phpinfo() при вызове из браузера и из cli. Возможно, используются разные php.ini (в Gentoo -- по умолчанию разные). Возможно попутное изменение конфигурации Web-сервером.
Возможно, причина в запуске от разных пользователей -- а это, скорее всего, так: apache (или под кем там сервер крутится) должен быть заблокирован для входа через терминал, а у пользователя, под которым вы входите, может не хватать прав.
спасибо, все это обязательно проверю, но стоит заметить, что запуск из cli прекрасно работает, т.е. запрос на третий сервер доходит, это точно! а вот ответ уже не возвращается.