2011-09-06 83 views
1

我想從一個文本文件中讀取一個簡單的字符串,它是大約3-4 MB,但fopen()失敗(稱爲「無法打開文件」)。以下是代碼:fopen()不工作

clearstatcache(); 
$fh = fopen("/my/path/to/file.txt", "r") or die("can't open file"); 
$sql = fread($fh,filesize("/my/path/to/file.txt")); 
+4

有沒有這樣的文件?嘗試不用「死」來查看實際錯誤 – k102

+6

您是否檢查了權限?另外,通過Apache在命令行和PHP上工作的位有所不同。 – Kumar

+0

kumar got it>。<將此貼爲答案,我會將其標記爲已接受...對於不便之處... –

回答

3

您是否首先檢查了該文件是否存在?

if (!file_exists("/my/path/to/file.txt") { 
    die('File does not exist'); 
} 

clearstatcache(); 

$fh = fopen("/my/path/to/file.txt", "r") or die("can't open file"); 
$sql = fread($fh,filesize("/my/path/to/file.txt")); 
+0

我將我的文件權限更改爲777,並且在添加clearstatcache方法後,我的腳本開始工作。 – Ultranuke

+1

這是一個缺少的圓括號,但編輯將不允許單個字符變化:( if(!file_exists(「/ my/path/to/file.txt」)){ – Steve

0

嘗試輸出系統錯誤或嘗試使用try ... catch。同時在開發時打開php錯誤。在打開文件之前檢查文件是否可讀。

最常見的問題是:文件不存在(或只是提供了錯誤的路徑?),沒有足夠的權限來讀取此文件。

0

變化是第二行:

$fh = fopen("/my/path/to/file.txt", "r") or die($php_errormsg); 

,看看它輸出的原因。

+0

請不要死! –

+1

@Col:我不是一個死的粉絲,但簡要的是找出爲什麼電話失敗,不重新構建所有的代碼:-) – paxdiablo

+0

沒有必要重新構建任何代碼。只是傳遞給開發人員的錯誤消息的方式 –

3

你要添加到您的代碼,此行

error_reporting(E_ALL); 

,並始終保留此行所有的代碼

而且這條線

ini_set('display_errors',1); 

,並保留此行只在開發服務器。
而在生產它應改爲

ini_set('display_errors',0); 
ini_set('log_errors',1); 

這樣做,你將不再需要援助#1中讀取現在很明顯的錯誤消息。

0

在您的FTP 文件權限往往需要是646(或-rw-r--rw-),777(總是忽視這些類型的評論)。你想給一個你信任的人一個鑰匙,設置權限爲777就好比給你的鑰匙副本大家