CronJob-Service
bei SELFPHP mit ...
|
+ minütlichen Aufrufen
+ eigenem Crontab Eintrag
+ unbegrenzten CronJobs
+ Statistiken
+ Beispielaufrufen
+ Control-Bereich
Führen Sie mit den CronJobs von
SELFPHP zeitgesteuert Programme
auf Ihrem Server
aus. Weitere Infos
|
:: Anbieterverzeichnis ::
Globale Branchen
Informieren Sie sich über ausgewählte Unternehmen im Anbieterverzeichnis von SELFPHP
:: Newsletter ::
Abonnieren Sie hier den kostenlosen
SELFPHP Newsletter!
|
PHP für Fortgeschrittene und Experten Fortgeschrittene und Experten können hier über ihre Probleme und Bedenken talken |
22.04.2004, 11:46:38
|
Junior Member
|
|
Registriert seit: Jun 2003
Beiträge: 194
|
|
libcurl langsamer als exec('curl.exe')
Hallo,
ich verwende »libcurl/7.10.8« mit »OpenSSL/0.9.7c« unter »PHP/4.3.6«.
Außerdem habe ich die Kommandozeilenversion »curl 7.11.1 (i386-pc-win32)« mit »libcurl/7.11.1«, »OpenSSL/0.9.7c« und »zlib/1.2.1« zur Verfügung.
Woran kann es liegen, daß ein Aufruf über
PHP-Code:
exec('curl.exe')
wesentlich schneller ist als die eingebaute libcurl (im Beispiel 1,2 s bzw. 4,1 s)?
Außerdem habe ich festgestellt, daß die Option CURLOPT_AUTOREFERER nicht zu funktionieren scheint.
Quelltext:
PHP-Code:
<?php
session_start();
class curl_TEST
{
var $rand_file; // Datei für libcurls COOKIEJAR
var $url; // abzufragende URL
var $referer; // Referer bzw. AUTOREFERER
var $useragent; // Browser
var $postdata; // Array mit POST-Feldern
var $usrpwd; // username:password
function curl_TEST ()
{
// init
dl('php_curl.dll');
// zufälliger Dateiname für COKKIEJAR
srand((double)microtime()*1000000);
$this->rand_file = 'cookie_'.md5(rand().rand()).'.txt';
// wenn Cookies vorhanden, in COOKIEFILE schreiben
if ($_SESSION['cookiefile'][0])
{
$fp = fopen($this->rand_file,'w');
foreach ($_SESSION['cookiefile'] as $cookieline)
{
fputs($fp, $cookieline);
}
fclose($fp);
}
$this->ch = curl_init();
} // Ende main
function exec ($url = NULL, $postdata = NULL)
{
if ($url) $this->url = $url;
if ($postdata) $this->postdata = $postdata;
// curl-handle für diesen Block kürzer machen
$ch = $this->ch;
if ($this->usrpwd)
curl_setopt($ch, CURLOPT_USERPWD, $this->usrpwd);
if ($this->referer)
curl_setopt($ch, CURLOPT_REFERER, $this->referer);
if ($this->useragent)
curl_setopt($ch, CURLOPT_USERAGENT, $this->useragent);
if ($this->postdata)
curl_setopt($ch, CURLOPT_POSTFIELDS, $this->postdata);
curl_setopt($ch, CURLOPT_URL, $this->url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_AUTOREFERER, 1);
curl_setopt($ch, CURLOPT_COOKIEFILE, $this->rand_file);
curl_setopt($ch, CURLOPT_COOKIEJAR, $this->rand_file);
curl_setopt($ch, CURLOPT_VERBOSE, 1);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($ch, CURLOPT_CAINFO, 'c:\php\curl\curl-ca-bundle.crt');
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_ENCODING , 'deflate, gzip');
if ($this->result = curl_exec($ch)) return TRUE;
}
function close ()
{
// curl-Handle schließen
curl_close($this->ch);
// COOKIEJAR in Session schreiben
if (file_exists($this->rand_file))
{
$_SESSION['cookiefile'] = file($this->rand_file);
unlink($this->rand_file);
}
}
} // Ende class
$x = new curl_TEST;
echo '<pre>';
//$x->referer = 'TEST-REFERER';
$x->useragent = 'Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)';
$x->url = 'https://www.domain.die.wo.umgeleitet.wird.de';
// Variante 1
echo shell_exec('c:\php\curl\curl.exe '.$x->url.' -v');
// Variante 2
$x->exec();
echo ($x->result);
print_r($_SESSION);
$x->close();
?>
|
22.04.2004, 12:29:13
|
Member
|
|
Registriert seit: Mar 2002
Beiträge: 548
|
|
Ich vermute, das liegt am Windows-Datei-Cache.
Bei exec() wird dieser in Anspruch genommen und beim PHP-eigenen dl() vermutlich nicht.
Mach doch mal folgendes:
Starte Windows neu, sodass der Datei-Cache geleert wird.
Miss daraufhin die Ausführzeit des allerersten exec()-Calls für curl.
Ich gehe jede Wette ein, dass dieser Call wesentlich länger dauert, als 1,2s.
|
22.04.2004, 13:19:28
|
Junior Member
|
|
Registriert seit: Jun 2003
Beiträge: 194
|
|
Hallo, Dago,
das verstehe ich jetzt nicht so richtig: Was wird denn da im Cache gespeichert? Der Aufruf der URL erfolgt doch jedesmal neu.
Wenn ich übrigens die URL ändere,
PHP-Code:
$x->url = 'http://www.normale_domain.die.wo.umgeleitet.wird.de';
dann sind die Zeiten ca. 0,5 s (exec('curl.exe')) und 0,6 s (libcurl) ...
PS: Den Rechner kann ich frühestens am Wochenende neustarten ...
|
22.04.2004, 13:30:34
|
Member
|
|
Registriert seit: Mar 2002
Beiträge: 548
|
|
Zitat:
Original geschrieben von tapferesschneid
Hallo, Dago,
das verstehe ich jetzt nicht so richtig: Was wird denn da im Cache gespeichert? Der Aufruf der URL erfolgt doch jedesmal neu.
|
Ich meinte, der Programmcode von Curl wird bei exec() nicht jedesmal von der Festplatte gelesen, sondern aus dem Datei-Cache.
Zitat:
Original geschrieben von tapferesschneid
Wenn ich übrigens die URL ändere,
PHP-Code:
$x->url = 'http://www.normale_domain.die.wo.umgeleitet.wird.de';
dann sind die Zeiten ca. 0,5 s (exec('curl.exe')) und 0,6 s (libcurl) ...
|
Ok, in dem Fall ist meine Vermutung natürlich hinfällig.
|
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
|
|
Forumregeln
|
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.
HTML-Code ist aus.
|
|
|
Alle Zeitangaben in WEZ +2. Es ist jetzt 14:30:57 Uhr.
|