使用文件处理函数在PHP中创建文件时出错?
有人能告诉我为什么这个代码不起作用吗?它不创建data.txt。并且该文件不保存任何内容使用文件处理函数在PHP中创建文件时出错?,php,Php,有人能告诉我为什么这个代码不起作用吗?它不创建data.txt。并且该文件不保存任何内容 <?php $txt = "data.txt"; if(isset($_POST['info1']) && isset($_POST['info2']) && isset($_POST['info3']) && isset($_POST['info4']) && isset($_POST['info5']
<?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);
}
}
?>
在
fopen
功能模式下
带有值的参数r
不会创建文件。
见文件
问题还可能是运行该PHP脚本的用户的写入权限
这只是我的猜测。无论如何,您应该配置PHP(在开发环境中)以显示每个错误/警告,以便调试此类问题。您可以在php.ini
文件中或直接在php文件中使用以下代码执行此操作:
error_reporting(E_ALL);
ini_set('display_errors', 1);
您首先尝试以只读方式打开文件,如果成功,请关闭该文件并使用写访问权限再次打开 仅当文件已存在时,此操作才有效 如果文件不存在,您的文本将不会写入其中 如果($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);
要在
isset
中检查多个变量,请仅创建一个isset
以检查所有变量
改变这个
if(isset($_POST['info1']) && isset($_POST['info2']) && isset($_POST['info3']) && isset($_POST['info4']) && isset($_POST['info5']) && isset($_POST['info6']))
到
是否已打开错误报告并在开发过程中显示错误?如果无法打开文件句柄进行写入,例如由于目录或现有文件的权限不正确,您将看到错误。
error\u reporting(E\u ALL);ini\u set('display\u errors',1)
始终处于开发阶段。您似乎对堆栈溢出还比较陌生,所以首先欢迎您!其次,本网站主要是为了帮助您克服遇到困难而无法克服的编程问题。要获得高质量的答案,请务必发布您尝试过的内容、当前得到的结果以及没有得到的结果他想要的结果是。您还没有显示您尝试解决问题所采取的步骤。如果我不得不猜测,我会说您的$\u POST
变量中有一个或多个未设置,或者存在权限问题。如果您进入If语句,请通过打印一些内容来检查您是否进入该语句,并检查以确保运行php的用户在给定目录中具有写入权限。fopen
withr
选项仅在文件不存在时发出警告,而fopen
选项a
将尝试创建文件(如果文件不存在),因此发布的代码应尝试使用第二个fopen
if(isset($_POST['info1'],$_POST['info2'],$_POST['info3'],$_POST['info4'],$_POST['info5'],$_POST['info6']))