2014-01-14 42 views
0

初学者需要PHP帮助。

我想用if语句编写(或追加)一些字符串以清空.txt文件。
然后还打开文件,但由于长度问题0失败。PHP:fopen不似乎使用filesize()后工作?

$filename = 'sometext.txt'; //empty text file 
$size = filesize($filename); 
if($size <= 0) { 
    $handle = fopen($filename, 'a'); 
    fwrite($handle, 'blah blah blah...'); 
    fclose($handle); 
} 

$handle = fopen($filename, 'r'); 
$current = fread($handle,filesize($filename)); 

这不会让我写或追加到$filename
但是,如果我注释掉声明,那么它的工作原理。

为什么会这样呢?

+0

为什么你会检查文件的大小?执行'print_r($ size)'来查看文件的大小,即使它是空的。 –

+0

在'$ size = filesize($ filename)之后提供一个'var_dump($ size)';' –

+0

Thanx为快速响应。在第一次访问时,我得到'警告:fread():长度参数必须大于0'。但是我重新加载页面错误消失了,'sometext.txt'里面充满了文本'blah blah blah ...'。 – norixxx

回答

1

为什么在追加模式下打开文件,如果知道,该文件不包含某些内容? 你也应该改变你的FWRITE线,如果你想要一些东西附加到现有的文件,因为你使用了错误的手柄

$filename = 'sometext.txt'; //empty text file 
$size = filesize($filename); 
if($size <= 0) { 
    $handle = fopen($filename, 'w'); 
    fwrite($handle, 'blah blah blah...'); 
    fclose($handle); 
} 

$handle = fopen($filename, 'r'); 
$current = fread($handle,filesize($filename)); 

,你有你的比较语句更改到>=

+0

@Phillip谢谢我尝试使用''w'',但仍然得到'fread():长度参数必须大于0'消息。 – norixxx

+0

@norixxx文件大小的结果被缓存......所以你必须使用'clearstatecache'。但为什么不简单地使用'file_get_contents'来读取整个文件呢? – Philipp

+0

你的'clearstatcache'建议对我的问题确实有效。我在添加'clearstatcache'之后和重新打开('r')文本文件之前。 – norixxx

0

你问如果文件大小是<或= 0。如果文件大小例如是1字节,则永远不会在if部分中达到fopen/fwrite/fclose调用。

如果您评论$size = filesize($filename) out,$ size没有定义。在PHP中没有定义和0是相等的,你到达if部分。这就是为什么当时有效。

0

尝试......

$my_file = 'emptytxt.txt'; 
$handle = fopen($my_file, 'a') or die('Cannot open file: '.$my_file); 
$size = filesize($my_file); 
$data = 'New data line 1'; 
if($size <= 0) 
{ 
fwrite($handle, $data); 
} 
fclose($handle);