0

如何自定义 fopen 上输出的文本名称?我尝试使用

$file = $Aname .'.txt';

但它不会正确输出,并且在创建文本文件后返回页面并提示用户创建文件。

<?php
$saving = $_REQUEST['saving'];
if ($saving == 1){ 
$Aname = $_POST['Aname'];

$name = $_POST['name']; 
$last = $_POST['last']; 
$mob = $_POST['mob']; 
$ext = $_POST['ext']; 
$email = $_POST['email']; 
$add = $_POST['add']; 
$com = $_POST['com']; 
$day = $_POST['day']; 
$text = $_POST['text'];
$date = date("M j, Y "); 

$data = "Date Sent: {$date}\n\nName: {$name} {$last}\nPhone : {$mob} ext: {$ext}\nCompany: {$com}\nAddress : {$add}\nE-mail : {$email}\nDay : {$day}\n\nNote :

\n{$text}\n---------------------------------------\n";

$file = $Aname.'.txt';

$fp = fopen($file, "a") or die("Couldn't open $file for writing!");
fwrite($fp, $data) or die("Couldn't write values to file!"); 

fclose($fp); 
}
?>

并且也不是将用户重新定位到另一个页面来给出这个错误

die("Couldn't write values to file!"); 

只需在页面上弹出警报。

4

3 回答 3

1

确保它$_POST['Aname']实际上已填充(也许它来自$_GET?)。

请注意,您在这里通过使用未经清理的数据写入磁盘打开了一个相当大的安全问题。人们可能会用 PHP 代码覆盖磁盘上的任何文件,然后执行该文件。

于 2012-09-26T16:11:33.370 回答
0

$filename您应该为 fopen的参数使用绝对路径,因此请替换以下行:

$file = $Aname.'.txt';

对于这个:

$file = dirname($_SERVER["SCRIPT_FILENAME"]) . '/' . $Aname.'.txt';

以上假设您的 Web 服务器运行 linux,如果它是 Windows 的,您必须转义任何反斜杠,例如fopen("c:\\my\\document_root\\myfile.txt", "a");

于 2012-09-26T15:43:27.960 回答
0

尝试使用 file_put_contents()。它取代了整个 fopen、fwrite、fclose 的头痛。 http://php.net/manual/en/function.file-put-contents.php

<?php
$saving = $_REQUEST['saving'];
if ($saving == 1){ 
$Aname = $_POST['Aname'];

$name = $_POST['name']; 
$last = $_POST['last']; 
$mob = $_POST['mob']; 
$ext = $_POST['ext']; 
$email = $_POST['email']; 
$add = $_POST['add']; 
$com = $_POST['com']; 
$day = $_POST['day']; 
$text = $_POST['text'];
$date = date("M j, Y "); 

$data = "Date Sent: {$date}\n\nName: {$name} {$last}\nPhone : {$mob} ext: {$ext}\nCompany: {$com}\nAddress : {$add}\nE-mail : {$email}\nDay : {$day}\n\nNote :

\n{$text}\n---------------------------------------\n";

$file = $Aname.'.txt';

file_put_contents ( $file, $data ); 
}
?>
于 2012-09-26T15:37:01.240 回答