2011-09-06 49 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就好比给你的钥匙副本大家