鍍金池/ 問(wèn)答/PHP/ 本地測(cè)試成功,上傳服務(wù)器后,打開(kāi)文件失敗(fopen和file_exists)

本地測(cè)試成功,上傳服務(wù)器后,打開(kāi)文件失?。╢open和file_exists)

1、在本地是可以運(yùn)行的;
2、上傳服務(wù)器后,fopen和file_exists都執(zhí)行失敗,文件地址我打印過(guò),沒(méi)有問(wèn)題,特意把備用地址打開(kāi),還是失敗

$filer = fopen($files, "r") or webalert('無(wú)法打開(kāi)文件!');
if(!file_exists($wenjian)){
    $wenjian = "shujuku/精選優(yōu)質(zhì)商品清單-2018-06-06.dat"; //如有備用數(shù)據(jù)庫(kù),啟動(dòng)備用數(shù)據(jù)庫(kù)
    echo "數(shù)據(jù)庫(kù) $wenjian 不存在,啟用備用數(shù)據(jù)庫(kù)\r\n";
}

3、看了下網(wǎng)上說(shuō)是要把文件權(quán)限設(shè)置777,我試過(guò)了,但是還是沒(méi)有反應(yīng)。

======================================================================
謝謝各路老鐵的解答,使用fopen和file_exists時(shí)候,我都轉(zhuǎn)碼過(guò)

function charaget($data){
  if(!empty($data) ){    
    $fileType = mb_detect_encoding($data , array('UTF-8','GBK','LATIN1','BIG5')) ;   
    if( $fileType != 'GB2312'){   
      $data = mb_convert_encoding($data ,'GB2312' , $fileType);   
    }   
  }   
  return $data;    
}

使用后,代碼都可以打印出正確的路徑,就是讀不到文件,最后轉(zhuǎn)換成UTF-8后,服務(wù)器上就正常了,不知道還有什么其他方法沒(méi)。

回答
編輯回答
醉淸風(fēng)

1、文件權(quán)限
2、文件夾權(quán)限

都設(shè)置成777,應(yīng)該就可以了

2017年3月3日 10:52
編輯回答
久舊酒

file_exists幾種錯(cuò)誤,如下

1.文件路徑不對(duì),很多人死在這個(gè)上面. 'shujuku/精選優(yōu)質(zhì)商品清單-2018-06-06.dat',這個(gè)是相對(duì)路徑.是相對(duì)于你的入口文件index.php的同級(jí)目錄.
2.文件權(quán)限.給php進(jìn)程用戶(hù)可以讀取權(quán)限就可以了. 755.然后上傳的父級(jí)目錄給777因?yàn)榭赡苌婕暗絼?chuàng)建文件.
3.file_exists結(jié)果會(huì)緩存.這個(gè)你仔細(xì)看一下官網(wǎng).解決這個(gè)可以先使用clearstatcache()這個(gè)函數(shù)來(lái)清除緩存.
4.file_exists對(duì)文件的文件名編碼是有限制的.在linux上是utf-8,windows是gbk.所以一般會(huì)統(tǒng)一字符編碼為utf-8.一般通過(guò)conv('UTF-8','gb2312','./哈哈哈哈哈.zip');來(lái)轉(zhuǎn)化編碼.

請(qǐng)?jiān)敿?xì)查看這四個(gè)原因.能解決99%的問(wèn)題.

2017年5月15日 05:37
編輯回答
莫小染

中文的話(huà),最好轉(zhuǎn)換一下文件名字符編碼為gbk
iconv函數(shù)了解一下

2018年5月15日 15:26
編輯回答
放開(kāi)她

單純的把單個(gè)文件設(shè)置成777是沒(méi)用的,文件夾也需要設(shè)置權(quán)限

2017年1月19日 15:39
編輯回答
刮刮樂(lè)

我覺(jué)得還有一種可能,就是你服務(wù)器上代碼執(zhí)行的路徑和本地執(zhí)行的不一樣,所以你文件的相對(duì)路徑如果還按照那么寫(xiě)的話(huà),有可能不對(duì)

2018年1月27日 15:00