在 PHP 的文本文件中分隔逗号


comma separated in text file in php

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+');

正如您在文档中读到的那样,假设您的表单包含名称为 filefile 类型的 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));