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我
答案 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();
之前。