应该发生什么:
会发生什么:
> [25-Sep-2018 13:56:56] WARNING: [pool www] child 11 said into stderr: "NOTICE: PHP message: PHP Notice: Undefined index: type in
> /var/www/html/report.php on line 27"
> [25-Sep-2018 13:56:56] WARNING: [pool www] child 11 said into stderr: "NOTICE: PHP message: PHP Warning: file_get_contents(.json):
> failed to open stream: No such file or directory in
> /var/www/html/report.php on line 28"
> 2018/09/25 13:57:00 [error] 8#8: *5 FastCGI sent in stderr: "PHP message: PHP Notice: Undefined index: type in
> /var/www/html/report.php on line 27
index.php
<script>
$(document).ready(function(){
$("button").click(function(){
$.ajax({
url: 'report.php',
type: "POST",
dataType:'json',
data: ({type: main}),
success: function(result){
$("#output").html(result);
}
});
});
});
</script>
report.php
$typename = $_POST['type'];
echo $typename;
$data = file_get_contents("$typename.json");
main.json
{
"reportDescription":{ <....>
}
答案 0 :(得分:4)
问题是您正在尝试将未定义的变量main
发送到您的php文件。此变量不存在,因此会出现错误。字符串必须用单引号或双引号引起来。
您应将data: ({type: main}),
更改为
data: {type: 'main'},
(不需要假体)
将字符串发送到您的PHP文件。
现在在您的PHP文件中,您需要输出$data
。
$typename = $_POST['type'];
echo $typename;
$data = file_get_contents("$typename.json");
echo $data;
答案 1 :(得分:0)
您应将data: {type: 'main'},
更改为answered before。
但是该答案中的php代码可以改进。此代码可能会导致安全问题,尤其是Server Side Request Forgery。您需要在用户提供的数据和应用程序代码之间设置清晰的边界,需要验证代码,以避免file_get_contents
的某些邪恶用途:
一个人可以通过http 请求一个随机网站,或使用其他协议(例如 ssh )连接到可从您的网络服务器访问的其他服务器
有人可以扫描目录并读取操作系统文件
因此,请注意对用户输入的操作,您需要对其进行验证。我将使用以下代码。
// strip all slashes and directories, use only the filename
$typename = basename($_POST['type']);
$filename = __DIR__.'/'.basename($_POST['type']).".json";
if (!file_exist($filename)){
echo "ERROR";
}
// do not output anything till validated
// echo $typename;
// use a header to tell the user that this is a json file
header('Content-Type: application/json');
$data = file_get_contents($filename);
echo $data;