麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁(yè) > 語(yǔ)言 > PHP > 正文

php fopen 函數(shù)不能獲取遠(yuǎn)程地址內(nèi)容

2024-09-04 11:47:57
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

fopen函數(shù)在php中多半是用于讀寫文件了,但有時(shí)也用于獲取遠(yuǎn)程服務(wù)器的文件,但我們?cè)谑褂胒open讀取遠(yuǎn)程文件時(shí)需要開(kāi)啟allow_url_fopen才可以哦。

解決過(guò)程,首先排除了DNS的問(wèn)題,因?yàn)槌诉@幾個(gè)函數(shù),其他一切工作正常。雖然是帶域名的URL才有問(wèn)題,但gethostbyname() 這個(gè)函數(shù)卻可以得到正確返回。 然后想到的是php.ini 的配置問(wèn)題——但發(fā)現(xiàn)allow_url_fopen 已經(jīng)打開(kāi)。 之后尋求Google幫忙,有人提及是SELINUX的問(wèn)題。可我壓根沒(méi)有打開(kāi)SELINUX。繼續(xù)Google之,發(fā)現(xiàn)了StackOverflow的這篇,代碼如下:

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

輸出結(jié)果:

  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.companysz.com/" 
  22.   ["timed_out"]=> 
  23.   bool(false
  24.   ["blocked"]=> 
  25.   bool(true
  26.   ["eof"]=> 
  27.   bool(false
  28. }*/ 

要使用fopen、getimagesize或include等函數(shù)打開(kāi)一個(gè)url,需要對(duì)php.ini進(jìn)行設(shè)置,通常設(shè)置allow_url_fopen為on允許fopen url,設(shè)置allow_url_include為on則允許include/require url,但在本地測(cè)試環(huán)境下卻不一定管用

  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測(cè)試環(huán)境中,這樣設(shè)置以后,fopen可以正常打開(kāi)遠(yuǎn)程地址,但遇到本地的地址卻會(huì)報(bào)錯(cuò),例如代碼如下:

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

就會(huì)在超過(guò)php.ini中設(shè)置的腳本最長(zhǎng)執(zhí)行時(shí)間后報(bào)錯(cuò),告知文件不存在等。這在在線服務(wù)器上是不會(huì)出現(xiàn)的,但如果將localhost替換成127.0.0.1,卻可以正常工作。

從狀況看,問(wèn)題出在DNS解析上,按理說(shuō)localhost已經(jīng)自動(dòng)被映射到127.0.0.1,實(shí)際上訪問(wèn)http://localhost和訪問(wèn)http://127.0.0.1也到達(dá)同一個(gè)地址。

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

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

打開(kāi)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. ?> 

運(yùn)行結(jié)果:string(1) "1" string(1) "2"

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 亚洲一级网站 | 国产欧美日韩在线不卡第一页 | 九一免费版在线观看 | 欧美a级毛片 | 国产欧美精品综合一区 | 国产一区免费观看 | 免费国产网站 | 久久一区国产 | 欧美一级毛片美99毛片 | 一级做受大片免费视频 | av中文在线观看 | 福利四区 | 免费一级毛片在线播放视频老 | 国产一区二区午夜 | 久久国产精品久久久久久电车 | 久久无| 撅高 自己扒开 调教 | 日本不卡一区二区三区在线观看 | 日本在线播放一区 | videos韩国 | 久久久亚洲欧美综合 | 狠狠干91 | 国产精品久久久久久久不卡 | 欧美一级黄 | 中文字幕极速在线观看 | 国产成人精品免费视频大全最热 | 午夜精品福利在线观看 | 欧美日韩亚洲视频 | 欧美精品久久久久久久久久 | 欧美日韩在线播放 | 羞羞漫画无遮挡观看 | 国内精品伊人久久 | 天天碰天天操 | 加勒比色综合 | 久久精品视频国产 | 黄视频网站免费在线观看 | 欧美成人精品欧美一级乱黄 | 免费毛片儿 | 成人偷拍片视频在线观看 | 久久久久久久亚洲视频 | 欧美性受ⅹ╳╳╳黑人a性爽 |