多多色-多人伦交性欧美在线观看-多人伦精品一区二区三区视频-多色视频-免费黄色视屏网站-免费黄色在线

國內最全IT社區平臺 聯系我們 | 收藏本站
阿里云優惠2
您當前位置:首頁 > php開源 > php教程 > php fopen 函數不能獲取遠程地址內容

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

來源:程序員人生   發布時間:2014-02-12 18:16:33 閱讀次數:2697次

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

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

  1. $file = fopen('http://www.phpfensi.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.phpfensi.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"

生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關閉
程序員人生
主站蜘蛛池模板: 成人卡通精品卡通动漫第一页 | 亚洲免费闲人蜜桃 | 最近手机中文字幕1 | 国产精品久久久久久久久久一区 | 亚洲黄色中文字幕 | 91av成年影院在线播放 | 日本欧美视频 | 校园亚洲春色另类小说合集 | 伊人久久婷婷 | 在线欧美69v免费观看视频 | 亚洲精品亚洲人成在线 | 免费一级毛片正在播放 | 91成人国产福利 | 亚洲人成a在线网站 | 天堂在线亚洲 | 亚洲精品久久一区影院 | 久久大香 | 免费视频一区 | 欧美午夜三级我不卡在线观看 | 欧美日韩一区二区在线视频播放 | 日本免费人做人一区在线观看 | 性欧美精品久久久久久久 | 一本一道久久综合狠狠老 | 免费看的成人yellow视频 | 九色在线看 | 国产三级观看久久 | 波多野结衣一区二区三区高清在线 | 日日夜夜精品免费视频 | 精品伊人久久大香线蕉网站 | 高清不卡一区 | 久久精品国产一区 | 欧美最刺激好看的一级毛片 | 欧美日韩欧美 | 天堂在线亚洲 | 亚洲欧美在线综合一区二区三区 | 中国特黄特级真人毛片 | 午夜理伦三级在线观看 | 五月婷婷伊人 | 五月婷婷视频在线 | 欧美大穴 | 欧美一线天 |