2013-05-22 9 views
1

我正在試驗這個包裝器,特別是從HTTP請求中提取原始數據。關於捲曲:通過php包裝的原始數據的方法?拋出一個錯誤

Protocol php not supported or disabled in libcurl 

看着我的phpinfo,這是什麼支持:

dict, file, ftp, ftps, gopher, http, https, imap, imaps, ldap, pop3, pop3s, rtsp, scp, sftp, smtp, smtps, telnet, tftp 

是否有PHP的方式(如果可能的話用這個包裝)拉從任意請求的原始數據(而不通過配置文件將PHP添加到該列表中)?

回答

0

可能是更好的使用:

$data = file_get_contents("php://input"); 

爲捲曲做了新的連接,因此可能無法訪問其與請求一起發送的數據。

+0

我已經有了這個方法,請參閱我的文章 – user1166981

+0

啊噢,抱歉 - 仍捲曲具有對當前請求沒有訪問我會說,它無法訪問數據。 –

+0

另一件事是cURL比file_get_contents等工作的可能性要小,因爲它需要系統中的附加軟件,並且使用cURL支持編譯php。有時你也可以使用:$ HTTP_RAW_POST_DATA,但是這也需要在php.ini中啓用。 –

0

的PHP DOC顯然存在firefox

PHP http://php://你的問題就像問爲什麼chrome://不工作之間有很大的差異提供了一些其他I/O流允許訪問的PHP自己的輸入和輸出流,標準輸入,輸出和錯誤文件描述符,內存中和磁盤備份的臨時文件流以及在讀取和寫入時可以操作其他文件資源的過濾器。

php://stdin, php://stdout and php://stderr 

PHP://標準輸入,PHP:// stdout和PHP:// stderr的允許PHP進程的相應的輸入或輸出流的直接訪問。該流引用重複的文件描述符,因此如果打開php:// stdin並稍後關閉它,則只關閉描述符的副本 - STDIN引用的實際流不受影響。請注意PHP直到PHP 5.2.1才展示了這方面的bug行爲。建議您只使用常量STDIN,STDOUT和STDERR,而不是使用這些包裝手動打開流。

這裏一個典型的使用

$temp = fopen("php://temp", "r+"); 

$curl = curl_init("__YOUR__URL"); 
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); 
curl_setopt($curl, CURLOPT_FILE, $temp); 
curl_exec($curl); 
curl_close($curl); 

fseek($temp, 0); 
while(! feof($temp)) { 
    echo fgets($temp); 
} 
fclose($temp);