国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > PHP > 正文

php fopen 函數不能獲取遠程地址內容

2024-09-04 11:47:57
字體:
來源:轉載
供稿:網友

fopen函數在php中多半是用于讀寫文件了,但有時也用于獲取遠程服務器的文件,但我們在使用fopen讀取遠程文件時需要開啟allow_url_fopen才可以哦。

解決過程,首先排除了DNS的問題,因為除了這幾個函數,其他一切工作正常。雖然是帶域名的URL才有問題,但gethostbyname() 這個函數卻可以得到正確返回。 然后想到的是php.ini 的配置問題——但發現allow_url_fopen 已經打開。 之后尋求Google幫忙,有人提及是SELINUX的問題。可我壓根沒有打開SELINUX。繼續Google之,發現了StackOverflow的這篇,代碼如下:

  1. $file = fopen('http://www.survivalescaperooms.com/''rb'); 
  2. var_dump(stream_get_meta_data($file)); 
  3. /* 

輸出結果:

  1. array(10) { 
  2.   ["wrapper_data"]=> 
  3.   array(2) { 
  4.     ["headers"]=> 
  5.     array(0) { 
  6.     } 
  7.     ["readbuf"]=> 
  8.     resource(38) of type (stream) 
  9.   } 
  10.   ["wrapper_type"]=> 
  11.   string(4) "cURL" 
  12.   ["stream_type"]=> 
  13.   string(4) "cURL" 
  14.   ["mode"]=> 
  15.   string(2) "rb" 
  16.   ["unread_bytes"]=> 
  17.   int(0) 
  18.   ["seekable"]=> 
  19.   bool(false
  20.   ["uri"]=> 
  21.   string(23) "http://www.survivalescaperooms.com/" 
  22.   ["timed_out"]=> 
  23.   bool(false
  24.   ["blocked"]=> 
  25.   bool(true
  26.   ["eof"]=> 
  27.   bool(false
  28. }*/ 

要使用fopen、getimagesize或include等函數打開一個url,需要對php.ini進行設置,通常設置allow_url_fopen為on允許fopen url,設置allow_url_include為on則允許include/require url,但在本地測試環境下卻不一定管用

  1. allow_url_fopen = on 
  2. Whether to allow the treatment of URLs (like http:// or ftp://) as files. 
  3. allow_url_include = on 
  4. Whether to allow include/require to open URLs (like http:// or ftp://) as files. 

在本地wamp測試環境中,這樣設置以后,fopen可以正常打開遠程地址,但遇到本地的地址卻會報錯,例如代碼如下:

fopen("http://localhost/myfile.php", "r"); 

就會在超過php.ini中設置的腳本最長執行時間后報錯,告知文件不存在等。這在在線服務器上是不會出現的,但如果將localhost替換成127.0.0.1,卻可以正常工作。

從狀況看,問題出在DNS解析上,按理說localhost已經自動被映射到127.0.0.1,實際上訪問http://localhost和訪問http://127.0.0.1也到達同一個地址。

解決的方法就是檢查一下Windows的host文件,通常位于system32目錄下,一個系統盤是C盤的host路徑如下所示

C:/Windows/System32/drivers/etc/hosts

打開hosts文件,用記事本或者notepad++等工具,將下面的127.0.0.1前面的#去掉即可,代碼如下:

  1. # localhost name resolution is handled within DNS itself.  
  2. #   127.0.0.1       localhost 

將url視為文件有什么用,比如給include的文件傳值,可以這樣

在example.inc.php中

  1. var_dump($_GET['foo']);     
  2. var_dump($_GET['bar']);  
  3. ?> 

運行結果:string(1) "1" string(1) "2"

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 义乌市| 文安县| 慈利县| 德格县| 嘉兴市| 镇沅| 哈巴河县| 台湾省| 奉节县| 达尔| 汾阳市| 新津县| 庆云县| 德格县| 阿合奇县| 嵩明县| 虹口区| 正定县| 佳木斯市| 宣城市| 永寿县| 正阳县| 庄浪县| 永福县| 扶余县| 托克托县| 太白县| 无锡市| 昔阳县| 东台市| 滨州市| 永城市| 永春县| 邢台市| 冀州市| 广水市| 海丰县| 吐鲁番市| 永平县| 潜江市| 洞口县|