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

时间:2016-03-27 10:20:45

标签: 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);

}

这是我的代码,用于将随机文本附加到带有逗号的字符串并将其保存在文本文件中,但是当我保存它时,它不能正确保存,因为它将转到下一行,这不应该发生plzz .. help我

2 个答案:

答案 0 :(得分:1)

我将使用与您不同的方法,假设您要保存到文件中的数据存储在变量$data中。

因此,首先使用逗号将此数据附加到文件中,我们只能使用两行代码:

$previousFileContent = file_get_contents("filename.txt");
file_put_contents("filename.txt", trim($previousFileContent . "," . $data));

答案 1 :(得分:1)

您的代码从一个非常大的问题开始:您尝试打开并从一个很可能不存在的文件中读取。

$file = $_FILES['file']['name'];
$fh = fopen($file,'r+');

正如您可以在documentation中看到的那样,假设您的表单包含名为input的{​​{1}}类型的file元素,file就是用户计算机上传文件的原始名称。它只是名称,不是服务器上文件的名称。它仅作为文件内容的提示(检查文件扩展名),但您不能依赖它。

文件内容暂时存储在网络服务器上的文件中,该文件的路径可在$_FILES['file']['name']中找到。您应该将它传递给PHP函数is_uploaded_file()以确保文件已上传,并且您的脚本不是注入尝试的受害者,如果您需要保留它,请使用move_uploaded_file()将其移动到你需要。如果你不移动它,当你的脚本结束时,临时文件就会被删除。

您的代码的另一个问题是:

$_FILES['file']['tmp_name']

如文档中所述,在没有第二个参数的情况下调用的函数fgets()从输入文件中读取一行,包括结束它的换行符。由于您将该行分为单词,我认为您不需要换行符。您可以将trim()$user = explode(' ',fgets($fh)); foreach ($user as $value) 返回的字符串一起删除,然后再将其传递给fgets()

最后一期代码是:

explode()

因为file_put_contents($_FILES['file']['name'], $final_number); 是一个数组 1 file_put_contents()连接其元素以获取字符串并将字符串写入文件。此操作将为$final_number生成的随机值与下一个$value连接起来,并且无法确定数据存储在文件中的哪个是哪个。您可能需要将它们分开保存。在$value上使用函数implode(),将$final_number作为其第一个参数,然后将生成的字符串写入文件中。

最后一个:不要将生成的内容写入"\n"。这不安全!它包含从浏览器接收的字符串;恶意用户可以放置他们想要的任何路径,并且您的脚本将覆盖不应该更改的文件。

创建一个专门用于存储代码生成的文件的目录,并根据存储在那里的文件的总增量计数器(当前$_FILES['file']['name']time() f.e.)生成文件名。 从不信任您从浏览器收到的数据。

1 microtime()用作$final_number,因为在第一次执行此行代码时未定义,PHP会为您创建一个空数组并将其存储在$final_number[] = ...中。 Don 依赖此功能。始终在首次使用之前初始化变量。将$final_number放在$final_number = array();之前。