home *** CD-ROM | disk | FTP | other *** search
/ PC World 2001 August / PCWorld_2001-08_cd.bin / Komunikace / phptriad / phptriadsetup2-11.exe / php / pear / Net / Curl.php next >
PHP Script  |  2001-01-10  |  8KB  |  354 lines

  1. <?php
  2. //
  3. // +----------------------------------------------------------------------+
  4. // | PHP version 4.0                                                      |
  5. // +----------------------------------------------------------------------+
  6. // | Copyright (c) 1997-2001 The PHP Group                                |
  7. // +----------------------------------------------------------------------+
  8. // | This source file is subject to version 2.02 of the PHP license,      |
  9. // | that is bundled with this package in the file LICENSE, and is        |
  10. // | available at through the world-wide-web at                           |
  11. // | http://www.php.net/license/2_02.txt.                                 |
  12. // | If you did not receive a copy of the PHP license and are unable to   |
  13. // | obtain it through the world-wide-web, please send a note to          |
  14. // | license@php.net so we can mail you a copy immediately.               |
  15. // +----------------------------------------------------------------------+
  16. // | Authors: Sterling Hughes <sterling@php.net>                          |
  17. // +----------------------------------------------------------------------+
  18. //
  19. // $Id: Curl.php,v 1.3 2001/01/10 01:01:56 ssb Exp $
  20. //
  21. // A nice friendly OO interface for CURL
  22. //
  23. require_once('PEAR.php');
  24.  
  25. class Net_Curl extends PEAR
  26. {
  27.     // {{{ Public Properties
  28.     
  29.     /**
  30.      * The URL for cURL to work with
  31.      *
  32.      * @var string $url
  33.      * @access public
  34.      */
  35.     var $url;
  36.     
  37.     /**
  38.      * The SSL version for the transfer
  39.      *
  40.      * @var integer $sslVersion
  41.      * @access public
  42.      */
  43.     var $sslVersion;
  44.     
  45.     /**
  46.      * The filename of the SSL certificate
  47.      *
  48.      * @var string $sslCert
  49.      * @access public
  50.      */
  51.     var $sslCert;
  52.     
  53.     /**
  54.      * The password corresponding to the certificate
  55.      * in the $sslCert property
  56.      *
  57.      * @var string $sslCertPasswd
  58.      * @access public
  59.      */
  60.     var $sslCertPasswd;
  61.     
  62.     /**
  63.      * Whether or not to include the header in the results
  64.      * of the CURL transfer
  65.      *
  66.      * @var boolean $header
  67.      */
  68.     var $header = 0;
  69.     
  70.     /**
  71.      * Whether or not to output debug information while executing a
  72.      * curl transfer
  73.      *
  74.      * @var boolean $verbose
  75.      * @access public
  76.      */
  77.     var $verbose = 0;
  78.     
  79.     /**
  80.      * Whether or not to display a progress meter for the current transfer
  81.      *
  82.      * @var boolean $progress
  83.      * @access public
  84.      */
  85.     var $progress = 0;
  86.     
  87.     /**
  88.      * Whether or not to suppress error messages
  89.      *
  90.      * @var boolean $mute
  91.      * @access public
  92.      */
  93.     var $mute = 1;
  94.     
  95.     /**
  96.      * Whether or not to return the results of the
  97.      * current transfer
  98.      *
  99.      * @var boolean $return_transfer
  100.      * @access public
  101.      */
  102.     var $return_transfer = 1;
  103.     
  104.     /**
  105.      * The type of transfer to perform
  106.      *
  107.      * @var string $type
  108.      * @access public
  109.      */
  110.     var $type;
  111.     
  112.     /**
  113.      * The file to upload
  114.      *
  115.      * @var string $file
  116.      * @access public
  117.      */
  118.     var $file;
  119.     
  120.     /**
  121.      * The file size of the file pointed to by the $file
  122.      * property
  123.      *
  124.      * @var integer $file_size
  125.      * @access public
  126.      */
  127.     var $file_size;
  128.     
  129.     /**
  130.      * The cookies to send to the remote site
  131.      *
  132.      * @var array $cookies
  133.      * @access public
  134.      */
  135.     var $cookies;
  136.     
  137.     /**
  138.      * The fields to send in a 'POST' request
  139.      *
  140.      * @var array $fields
  141.      * @access public
  142.      */
  143.     var $fields;
  144.     
  145.     /**
  146.      * The proxy server to go through
  147.      *
  148.      * @var string $proxy
  149.      * @access public
  150.      */
  151.     var $proxy;
  152.     
  153.     /**
  154.      * The username for the Proxy server
  155.      *
  156.      * @var string $proxyUser
  157.      * @access public
  158.      */
  159.     var $proxyUser;
  160.     
  161.     /**
  162.      * The password for the Proxy server
  163.      *
  164.      * @var string $proxyPassword
  165.      * @access public
  166.      */
  167.     var $proxyPassword;
  168.     
  169.     // }}}
  170.     // {{{ Private Properties
  171.     
  172.     /**
  173.      * The current curl handle
  174.      *
  175.      * @var resource $_ch
  176.      * @access public
  177.      */
  178.     var $_ch;
  179.     
  180.     // }}}
  181.     // {{{ Net_Curl()
  182.     
  183.     /**
  184.      * The Net_Curl constructor, called when a new Net_Curl object
  185.      * is initialized
  186.      *
  187.      * @param string           [$url] The URL to fetch (can be set 
  188.      *                                using the $url property as well)
  189.      *
  190.      * @return object Net_Curl $obj   A new Net_Curl object
  191.      *
  192.      * @access public
  193.      * @author Sterling Hughes <sterling@php.net>
  194.      * @since  PHP 4.0.5
  195.      */
  196.     function Net_Curl($url = "")
  197.     {
  198.         if ($url) {
  199.             $this->url = $url;
  200.         }
  201.         
  202.         $ch = curl_init();
  203.         if (!$ch) {
  204.             $this = new PEAR_Error("Couldn't initialize a new curl handle");
  205.         }
  206.         
  207.         $this->_ch = $ch;
  208.     }
  209.  
  210.     // }}}
  211.     // {{{ execute()
  212.     
  213.     /**
  214.      * Executes a prepared CURL transfer
  215.      *
  216.      * @access public
  217.      * @author Sterling Hughes <sterling@php.net>
  218.      * @since  PHP 4.0.5
  219.      */
  220.     function execute()
  221.     {
  222.         $ch  = &$this->_ch;
  223.         $ret = true;
  224.         
  225.         // Basic stuff
  226.         
  227.         $ret = curl_setopt($ch, CURLOPT_URL,    $this->url);
  228.         $ret = curl_setopt($ch, CURLOPT_HEADER, $this->header);
  229.         
  230.         // Whether or not to return the transfer contents
  231.         if ($this->return_transfer && !$this->file) {
  232.             $ret = curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
  233.         }
  234.  
  235.         // SSL Checks
  236.         
  237.         if (isset($this->sslVersion)) {
  238.             $ret = curl_setopt($ch, CURLOPT_SSLVERSION, $this->sslVersion);
  239.         }
  240.         
  241.         if (isset($this->sslCert)) {
  242.             $ret = curl_setopt($ch, CURLOPT_SSLCERT, $this->sslCert);
  243.         }
  244.         
  245.         if (isset($this->sslCertPasswd)) {
  246.             $ret = curl_setopt($ch, CURLOPT_SSLCERTPASSWD, $this->sslCertPasswd);
  247.         }
  248.         
  249.         // Proxy Related checks
  250.  
  251.         if (isset($this->proxy)) {
  252.             $ret = curl_setopt($ch, CURLOPT_PROXY, $this->proxy);
  253.         }
  254.  
  255.         if (isset($this->proxyUser) || isset($this->proxyPassword)) {
  256.             $proxyString = $this->proxyUser . ":" . $this->proxyPassword;
  257.             
  258.             $ret = curl_setopt($ch, CURLOPT_PROXYUSERPWD, $proxyString);
  259.         }
  260.         
  261.         
  262.         // Transfer type
  263.         
  264.         if (isset($this->type)) {
  265.             switch (strtolower($this->type)) {
  266.             case 'post':
  267.                 $ret = curl_setopt($ch, CURLOPT_POST, 1);
  268.                 break;
  269.             case 'put':
  270.                 $ret = curl_setopt($ch, CURLOPT_PUT, 1);
  271.                 break;
  272.             }
  273.         }
  274.         
  275.         
  276.         // Transfer upload, etc. related
  277.         
  278.         if (isset($this->file)) {
  279.             if (!isset($this->file_size)) {
  280.                 $this->file_size = filesize($this->file);
  281.             }
  282.             
  283.             $ret = curl_setopt($ch, CURLOPT_INFILE, $this->file);
  284.             $ret = curl_setopt($ch, CURLOPT_INFILESIZE, $this->file_size);
  285.         }
  286.         
  287.         if (isset($this->fields)) {
  288.             if (!isset($this->type)) {
  289.                 $this->type = 'post';
  290.                 $ret = curl_setopt($ch, CURLOPT_POST, 1);
  291.             }
  292.             
  293.             $ret = curl_setopt($ch, CURLOPT_POSTFIELDS, $this->fields);
  294.         }
  295.         
  296.         
  297.         // Error related
  298.         
  299.         if ($this->progress) {
  300.             $ret = curl_setopt($ch, CURLOPT_PROGRESS, 1);
  301.         }
  302.         
  303.         if ($this->verbose) {
  304.             $ret = curl_setopt($ch, CURLOPT_VERBOSE, 1);
  305.         }
  306.         
  307.         if (!$this->mute) {
  308.             $ret = curl_setopt($ch, CURLOPT_MUTE, 0);
  309.         }
  310.         
  311.         
  312.         // Cookies and the such
  313.         
  314.         if (isset($this->cookies)) {
  315.             foreach ($this->cookies as $name => $value) {
  316.                 $cookie_data .= urlencode($name) . ": " . urlencode($value);
  317.                 $cookie_data .= "\n";
  318.             }
  319.         
  320.             $ret = curl_setopt($ch, CURLOPT_COOKIE, $cookie_data);
  321.         }
  322.         
  323.         $ret = curl_exec($ch);
  324.         if (!$ret) {
  325.             $errObj = new PEAR_Error(curl_error($ch), curl_errno($ch));
  326.             return($errObj);
  327.         }
  328.         
  329.         return($ret);
  330.     }
  331.     
  332.     // }}}
  333.     // {{{ close()
  334.     
  335.     /**
  336.      * Closes the curl transfer and finishes the object (kinda ;)
  337.      *
  338.      * @access public
  339.      * @author Sterling Hughes <sterling@php.net>
  340.      * @since  PHP 4.0.5
  341.      */
  342.     function close()
  343.     {
  344.         if ($this->_ch) {
  345.             curl_close($this->_ch);
  346.         }
  347.     }
  348.     
  349.     // }}}
  350. }
  351.  
  352. // }}}
  353.  
  354. ?>