鍍金池/ 問答/PHP/ 本地測試成功,上傳服務(wù)器后,打開文件失?。╢open和file_exists)

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

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

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

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

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

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ù)器上就正常了,不知道還有什么其他方法沒。

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

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

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

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

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

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

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

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

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

2018年5月15日 15:26
編輯回答
放開她

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

2017年1月19日 15:39
編輯回答
刮刮樂

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

2018年1月27日 15:00