有人可以告诉我为什么这段代码不起作用?它不会创建data.txt。并且文件没有保存任何内容。
<?php
$txt = "data.txt";
if(isset($_POST['info1']) && isset($_POST['info2']) && isset($_POST['info3']) && isset($_POST['info4']) && isset($_POST['info5']) && isset($_POST['info6'])) {
// check if both fields are set
//open file in read mode to get number of lines
$handle = fopen($txt, 'r');
//check file opened
if($handle) {
//get number of lines
$count = 1;
while(fgets($handle) !== false) {
$count++;
}
fclose($handle);
//open in append mode.
$handle = fopen($txt, 'a');
//prepare data to be writen
$txt = $count . ' ' . $_POST['info1'].'/'.$_POST['info2'].'/'.$_POST['info3'].'/'.$_POST['info4'].'/'.$_POST['info5'].'/'.$_POST['info6']. "\r\n";
//write data to file
fwrite($handle,$txt);
fclose($handle);
}
}
?>
答案 0 :(得分:1)
在fopen
函数mode
中,值为r
的参数不会创建文件。
请参阅fopen文档。
此问题也可能是运行该PHP脚本的用户的写权限。
这些只是我的猜测。无论如何,您应该配置您的PHP(在开发环境中)以向您显示每个错误/警告,以便调试此类问题。您可以使用以下代码在php.ini
文件或直接在PHP文件中执行此操作:
error_reporting(E_ALL);
ini_set('display_errors', 1);
答案 1 :(得分:1)
您首先尝试打开只读文件,如果成功,则关闭它并使用写访问权限再次打开它。
这仅在文件已存在时才有效。
如果该文件不存在,您的文本将不会被写入。
如果if ($handle) {
在第二个fopen
来电之前,请移动右括号。
if($handle) {
//get number of lines
$count = 1;
while(fgets($handle) !== false) {
$count++;
}
fclose($handle);
}
//open in append mode.
$handle = fopen($txt, 'a');
//prepare data to be writen
$txt = $count . ' ' . $_POST['info1'].'/'.$_POST['info2'].'/'.$_POST['info3'].'/'.$_POST['info4'].'/'.$_POST['info5'].'/'.$_POST['info6']. "\r\n";
//write data to file
fwrite($handle,$txt);
fclose($handle);
顺便说一下,你可以把它减少到三行代码。
$lines = file($txt);
$count = sizeof($lines);
file_put_contents($txt, $count . ' ' . $_POST['info1'].'/'.$_POST['info2'].'/'.$_POST['info3'].'/'.$_POST['info4'].'/'.$_POST['info5'].'/'.$_POST['info6']. "\r\n", FILE_APPEND);
答案 2 :(得分:0)
检查isset
中的多个变量,只创建一个isset
来检查所有变量
更改此
if(isset($_POST['info1']) && isset($_POST['info2']) && isset($_POST['info3']) && isset($_POST['info4']) && isset($_POST['info5']) && isset($_POST['info6']))
到
if(isset($_POST['info1'],$_POST['info2'],$_POST['info3'],$_POST['info4'],$_POST['info5'],$_POST['info6']))