if(isset($_POST['submit']))
{
$file = $_FILES['file']['name'];
$fh = fopen($file,'r+');
// string to put username and passwords
$users = '';
while(!feof($fh)) {
$user = explode(' ',fgets($fh));
foreach ($user as $value)
{
$number= rand(1000,10000);
$final_number[] = $value .','. $number;
}
}
//print_r($final_number);
file_put_contents($_FILES['file']['name'], $final_number);
}
这是我的代码,用于将随机文本附加到带有逗号的字符串并将其保存在文本文件中,但是当我保存它时,它在逗号后无法正确保存,它将转到下一行,这不应该发生.. 帮助我
您的代码从一个非常大的问题开始:您尝试打开并读取一个很可能不存在的文件。
$file = $_FILES['file']['name'];
$fh = fopen($file,'r+');
正如您在文档中读到的那样,假设您的表单包含名称为 file
的 file
类型的 input
元素,$_FILES['file']['name']
是用户计算机上上传文件的原始名称。它只是名称,而不是服务器上文件的名称。它只是作为文件内容的提示提供的(检查文件扩展名(,但您不能依赖它。
文件的内容临时存储在 Web 服务器上的文件中,该文件的路径可以在 $_FILES['file']['tmp_name']
中找到。您应该将其传递给PHP函数is_uploaded_file()
以确保文件已上传并且您的脚本不是注入尝试的受害者,那么,如果您需要保留它,请使用move_uploaded_file()
将其移动到需要的位置。如果不移动它,则在脚本结束时将删除临时文件。
代码的另一个问题是:
$user = explode(' ',fgets($fh));
foreach ($user as $value)
如文档中所述,在没有第二个参数的情况下调用fgets()
函数从输入文件中读取一行,包括结束它的换行符。由于您将行拆分为单词,我认为您不需要换行符。您可以通过在将字符串传递给 explode()
之前对 fgets()
返回的字符串使用 trim()
来删除它。
代码的最后一个问题是:
file_put_contents($_FILES['file']['name'], $final_number);
由于$final_number
数组1,因此file_put_contents()
联接其元素以获取字符串并将字符串写入文件。此操作将为$value
生成的随机值与下一个$value
连接起来,并且在数据存储在文件中后无法判断哪个是哪个。您可能需要将它们放在单独的行上。在$final_number
上使用函数implode()
,将"'n"
作为其第一个参数,并将生成的字符串写入文件中。
最后一个:不要将生成的内容写入$_FILES['file']['name']
。不安全!它包含从浏览器接收的字符串;恶意用户可以将他们想要的任何路径放在那里,您的脚本将覆盖不应更改的文件。
创建一个专用于存储代码生成的文件的目录,并根据存储在那里的文件的始终递增的计数器(当前time()
或microtime()
f.e.(生成文件名。永远不要相信您从浏览器收到的数据。
1 $final_number
用作$final_number[] = ...
,由于第一次执行此行代码时未定义它,因此 PHP 为您创建一个空数组并将其存储在 $final_number
中。不要依赖此功能。始终在变量首次使用之前对其进行初始化。把$final_number = array();
放在while()
之前。
我将使用与您不同的方法,假设您要保存到文件的数据存储在变量$data
中。
因此,要首先用逗号将此数据附加到文件中,我们只需使用两行代码:
$previousFileContent = file_get_contents("filename.txt");
file_put_contents("filename.txt", trim($previousFileContent . "," . $data));