我有一个PHP cron-script
Class Cron {
public function __construct {
$this->dosomething();
}
private function dosomething () {
$curl = app_curl();
}
}
function app_curl () {
... $ Curl ...
return $ curl;
}
当我运行此脚本时 - 它不满意,并中止Cron。如果我单独运行app_curl(),那么一切正常。
// fullcode
// cli / auto cron文件(代码点火器)
class Auto extends CLI_Controller {
public function index() {
$this->process_broadcasts();
} // function
private function process_broadcasts(){
$curl = app_curl_get_postmaster();
} // function
} // class
// curl_function
function get_web_page($url, $post = array())
{
if (!isset($url) || empty($url)) return false;
$uagent = "Opera/9.80 (Windows NT 6.1; WOW64) Presto/2.12.388 Version/12.14";
$ch = curl_init( $url );
$path = dirname(__FILE__);
$tmpfile = $path . DIRECTORY_SEPARATOR . 'cookie' . '.txt';
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // возвращает веб-страницу
curl_setopt($ch, CURLOPT_HEADER, 0); // не возвращает заголовки
curl_setopt($ch, CURLOPT_ENCODING, ""); // обрабатывает все кодировки
curl_setopt($ch, CURLOPT_USERAGENT, $uagent); // useragent
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 120); // таймаут соединения
curl_setopt($ch, CURLOPT_TIMEOUT, 120); // таймаут ответа
curl_setopt($ch, CURLOPT_COOKIESESSION, 1); // переходит по редиректам
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); // переходит по редиректам
curl_setopt($ch, CURLOPT_MAXREDIRS, 10); // останавливаться после 10-ого редиректа
curl_setopt($ch, CURLOPT_COOKIEFILE, $tmpfile);
curl_setopt($ch, CURLOPT_COOKIEJAR, $tmpfile);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
if (isset($post) && !empty($post)) {
if (!is_array($post)) $post[$$post] = $post;
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($post));
}
$content = curl_exec( $ch );
$err = curl_errno( $ch );
$errmsg = curl_error( $ch );
$header = curl_getinfo( $ch );
curl_close( $ch );
$header['errno'] = $err;
$header['errmsg'] = $errmsg;
$header['content'] = $content;
return $header;
}
// get_postmaster
function app_curl_get_postmaster($date = null) {
if ($date === null) $date = date('d.m');
$post = array(
'Login' => 'gzhegow2@mail.ru',
'Domain' => 'mail.ru',
'Password' => '321qwe',
'saveauth' => 1,
'new_auth_form' => 1,
'page' => 'https://postmaster.mail.ru/',
'post' => '',
'login_form' => ''
);
$v = get_web_page('https://auth.mail.ru/cgi-bin/auth', $post);
$v = get_web_page('https://postmaster.mail.ru/100tr.ru/');
$html = str_get_html($v['content']);
$tmp = array();
$arr = array();
$tr_counter = 0;
foreach ($html->find('table[id=stats] tr') as $tr) {
foreach ($tr->find('td[class*=statistic-table__date]') as $td) {
$tmp[$tr_counter]['date'] = trim($td->plaintext);
}
foreach ($tr->find('td[class*=statusbar__delivered]') as $td) {
$tmp[$tr_counter]['good'] = trim($td->plaintext);
}
foreach ($tr->find('td[class*=statusbar__probspam]') as $td) {
$tmp[$tr_counter]['warn'] = trim($td->plaintext);
}
foreach ($tr->find('td[class*=statusbar__spam]') as $td) {
$tmp[$tr_counter]['spam'] = trim($td->plaintext);
}
$tr_counter++;
};
foreach ($tmp as $item) {
if (isset($item['date']) && !empty($item['date'])) $arr[$item['date']] = $item;
}
return $arr[$date];
}
我认为Curl在运行另一个脚本时没有时间执行,但如果我这样做
print_r(app_curl_get_postmaster());
然后一切正常。可能是什么原因?
答案 0 :(得分:0)
哈哈,我用::
error_reporting(E_ALL);
ini_set('display_errors', 1);
ini_set('max_execution_time', 3600);
ini_set('memory_limit', '256M');
他们告诉我' str_get_html'是未知的功能'。
我确实需要simple_html_dom.php并且它可以工作。
感谢所有人,帮助!