我对PHP和理解GET / POST都是陌生的。我正在向此phpfile使用postbackurl,并尝试将GET / POST信息写入文本文件。它不起作用,我希望有人可以向我指出我可能明显的错误。下面是代码。
$postback_data = $_REQUEST;
foreach($postback_data as $key=>$var)
{
$myfile = fopen("newfile.txt", "w") or die("Unable to open file!");
$output = $key . ' : ' . $val ."\n";
fwrite($myfile, $output);
fclose($myfile);
}
答案 0 :(得分:1)
您的代码中有两个误解:
$key=>$var
中的每个$postback_data
,您正在打开一个文件,对其进行写入并关闭,这是非常无效的。您应该在循环之前将其打开一次,并在循环完成后将其关闭。以下代码可能会满足您的要求:
$postback_data = $_REQUEST;
$myfile = fopen("newfile.txt", "a") or die("Unable to open file!");
foreach($postback_data as $key=>$var) {
$output = $key . ' : ' . $val ."\n";
fwrite($myfile, $output);
}
fclose($myfile);
如果您希望为每个请求创建一个新文件,请在"w"
上使用fopen()
模式。如果要将每个新请求的POST数据附加到同一文件,请使用"a"
。
答案 1 :(得分:0)
将fopen和fclose放置在循环外部,或者使用fopen('file.txt',a)代替。 fopen('file.txt',w)重置文件并覆盖所有内容。
答案 2 :(得分:0)
如果您的目标只是将该信息保存到文件中以查看它,而格式不是那么重要,则可以使用一些内置函数来实现。您无需使用foreach
遍历整个列表:
$post = var_export($_REQUEST, true);
file_put_contents('newfile.txt', $post);
当心:$_REQUEST
除$_COOKIE
和$_POST
之外还包含$_GET
数据。
var_export
在这里返回给定变量的字符串表示形式。如果省略第二个参数true
,它将直接输出它。
如果您的目标是提高技能,那么下面是带注释的正确代码版本:
// prefer camelCase for variable names rather than under_scores
$postbackData = $_REQUEST;
// Open the resource before (outside) the loop
$handle = fopen('newfile.txt', 'w');
if($handle === false) {
// Avoid inline die/exit usage, prefer exceptions and single quotes
throw new \RuntimeException('File could not open for writing!');
}
// Stick with PSR-2 or other well-known standard when writing code
foreach($postbackData as $key => $value) {
// The PHP_EOL constant is always better than escaped new line characters
$output = $key . ' : ' . $value . PHP_EOL;
fwrite($handle, $output);
}
// Close the resource after the loop
fclose($handle);
也不要忘记使用查询字符串中的一些测试数据来调用文件,例如:http://localhost/postback.php?bar=baz否则,$_RQUEST
和文件内容都将为空,因为没有内容可显示
祝你好运,欢迎堆栈溢出!