2010-12-09 86 views
1

嗨,当我执行此代码没有发生在浏览器中,但是当我删除与明星线,内容打印正确,最新错误?问题与fopen和fwrite

/////////////////

$documentroot=$_SERVER['DOCUMENT_ROOT']; 
$handle=fopen("$documentroot/order/order.txt",'r+'); 

if(!$handle) { 
    echo 'error opening file'; 
} 

$content="pepsi\ncola\npeperoni"; 
$write=fwrite($handle,$content); //* 

if(!$write){ //* 
    echo 'error writing'; //* 
} //* 

while(!feof($handle)) { 
$string=fgets($handle); 
echo $string; 
} 
+0

你确定PHP账户(例如www-data)有写权限吗? – Hamish 2010-12-09 06:51:18

+0

您需要在if语句中使用`($ write === false)``。 – 2010-12-09 06:57:17

回答

2

此行应该是这样的。

$handle=fopen("$documentroot/order/order.txt",'w'); 

文件应该在写入mode.try中打开这个。

谢谢。

+0

问题是,我不输入倒带($句柄),谢谢回答,这么多 – user533287 2010-12-09 08:59:23

0

/*这是PHP的开始标记,它需要用另一个*/关闭,但这次是*。你可以坚持//只有一行评论。

+0

问题是,我不输入倒带($句柄),谢谢回答,非常感谢 – user533287 2010-12-09 09:02:44

0

您正在打开r+模式下的文件,这意味着读取+写入模式。但是如果文件orders.txt不存在,则会创建而不是。所以确保文件存在。

另外,当打开文件出现问题时,您立即退出

if(!$handle) { 
    echo 'error opening file'; 
    exit; // MISSING 
} 

假设文件已经存在,它的内容将在fopen之后被擦除。接下来,fwrite将写入内容。现在文件指针位于文件的末尾,因此您在while循环中拨打feof()的电话将返回true,并且永远不会输入。

为了解决这个问题,你倒回文件指针开始从文件中读取前:

rewind($handle); // ADD THIS 

while(!feof($handle)) { 
... 
} 
0
$documentroot=$_SERVER['DOCUMENT_ROOT']; 
$handle=fopen("$documentroot/order/order.txt",'r+'); 

if(!$handle) { 
    echo 'error opening file'; 
} 

$content="pepsi\ncola\npeperoni"; 
$write=fwrite($handle,$content); 

if(!$write){ 
    echo 'error writing'; 
} 
fseek($handle, 0); 
while(!feof($handle)) { 
$string=fgets($handle); 
echo $string; 
} 

文件的写操作后,您的文件指针设置写入数据的一端需要设置为fgets的开始位置。 fseek这样做。

fseek($ handle,0);

这会将您的指针指向开头,以便fgets现在可以从文件中读取。 fgets函数需要有效的文件指针来读取在这种情况下的起始位置。