SELFPHP: Version 5.8.2 Befehlsreferenz - Tutorial – Kochbuch – Forum für PHP Einsteiger und professionelle Entwickler

SELFPHP


Professional CronJob-Service

Suche



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



:: Buchempfehlung ::

PHP 5.3 & MySQL 5.1

PHP 5.3 & MySQL 5.1 zur Buchempfehlung
 

:: Anbieterverzeichnis ::

Globale Branchen

Informieren Sie sich über ausgewählte Unternehmen im Anbieterverzeichnis von SELFPHP  

 

:: Newsletter ::

Abonnieren Sie hier den kostenlosen SELFPHP Newsletter!

Vorname: 
Name:
E-Mail:
 
 

Zurück   PHP Forum > PHP für Fortgeschrittene und Experten
Hilfe Community Kalender Heutige Beiträge Suchen

PHP für Fortgeschrittene und Experten Fortgeschrittene und Experten können hier über ihre Probleme und Bedenken talken

Antwort
 
Themen-Optionen Ansicht
  #1  
Alt 22.04.2004, 11:46:38
tapferesschneid tapferesschneid ist offline
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($chCURLOPT_USERPWD$this->usrpwd);
        if (
$this->referer)
            
curl_setopt($chCURLOPT_REFERER$this->referer);
        if (
$this->useragent)
            
curl_setopt($chCURLOPT_USERAGENT$this->useragent);
        if (
$this->postdata)
            
curl_setopt($chCURLOPT_POSTFIELDS$this->postdata);

        
curl_setopt($chCURLOPT_URL$this->url);
        
curl_setopt($chCURLOPT_RETURNTRANSFER1);
        
curl_setopt($chCURLOPT_AUTOREFERER1);
        
curl_setopt($chCURLOPT_COOKIEFILE$this->rand_file);
        
curl_setopt($chCURLOPT_COOKIEJAR$this->rand_file);
        
curl_setopt($chCURLOPT_VERBOSE1);

        
curl_setopt($chCURLOPT_SSL_VERIFYHOST0);
        
curl_setopt($chCURLOPT_SSL_VERIFYPEER0);
        
curl_setopt($chCURLOPT_CAINFO'c:\php\curl\curl-ca-bundle.crt');
        
curl_setopt($chCURLOPT_FOLLOWLOCATION1);
        
curl_setopt($chCURLOPT_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();
?>
Mit Zitat antworten
  #2  
Alt 22.04.2004, 12:29:13
Dago Dago ist offline
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.
Mit Zitat antworten
  #3  
Alt 22.04.2004, 13:19:28
tapferesschneid tapferesschneid ist offline
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 ...
Mit Zitat antworten
  #4  
Alt 22.04.2004, 13:30:34
Dago Dago ist offline
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.
Mit Zitat antworten
Antwort


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.

BB-Code ist an.
Smileys sind aus.
[IMG] Code ist aus.
HTML-Code ist aus.

Gehe zu


Alle Zeitangaben in WEZ +2. Es ist jetzt 14:30:57 Uhr.


Powered by vBulletin® Version 3.8.3 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.


© 2001-2024 E-Mail SELFPHP OHG, info@selfphp.deImpressumKontakt