php中curl、fsockopen的應用

最近要用到經過post上傳文件,網上盛傳的有curl的post提交和fsockopen,其中curl最簡單,因而從最簡單的提及。php

這是簡單的將一個變量post到另一個頁面html

$url = '';
$data = array('a'=> 'b');
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
$ret = curl_exec($ch);
curl_close($ch);
主要說下這個選項CURLOPT_RETURNTRANSFER:若是設置爲true/1,則curl_exec的時候不會自動將請求網頁的內容輸出到屏幕,$ret爲請求網頁的內容,若是設置爲false/0,則curl_exec的時候會自動將請求網頁的內容輸出到屏幕,此時若是請求成功的話$ret的內容是1或者true。web

下面是上傳本地文件的代碼,若是須要上傳遠程文件,則先down到本地,而後刪掉便可(若有同窗有別的辦法還請告知):curl

$url = '';
$file = '1.jpg';
$field['uploadFile'] = '@'.$file;(uploadFile爲接收端的name名)
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $field);
$ret = curl_exec($ch);
curl_close($ch);post

-------------------------------------------------------------------------------------url

這是fsockopen的辦法:
        $uploadInfo = array(
                'host'=>'',
                'port'=>'80',
                'url'=>'/upload.php'
        );
        $fp = fsockopen($uploadInfo['host'],$uploadInfo['port'],$errno,$errstr);spa

    $file = '1.jpg';orm

                $content = file_get_contents($file);
                $boundary = md5(time());
                $out.="--".$boundary."\r\n";
                $out.="Content-Disposition: form-data; name=\"uploadFile\"; filename=\"".$file."\"\r\n";
                $out.="Content-Type: image/jpg\r\n\r\n";
                $out.=$content."\r\n";
                $out.="--".$boundary."\r\n";htm

 

                fwrite($fp,"POST ".$uploadInfo['url']." HTTP/1.1\r\n");
                fwrite($fp,"Host:".$uploadInfo['host']."\r\n");
                fwrite($fp,"Content-Type: multipart/form-data; boundary=".$boundary."\r\n");
                fwrite($fp,"Content-length:".strlen($out)."\r\n\r\n");
                fwrite($fp,$out);
                while (!feof($fp)){
                        $ret .= fgets($fp, 1024);
                }
                fclose($fp);
                $ret = trim(strstr($ret, "\r\n\r\n"));
                preg_match('/http:.*/', $ret, $match);
                return $match[0];blog

 

附上一篇curl的帖子 http://www.cnblogs.com/lmule/archive/2010/10/27/1862734.html

相關文章
相關標籤/搜索