我只是尝试使用jquery $ .post()将一些信息传递给PHP脚本,然后将该信息写入文本文件。这个帖子工作得很好。据我所知,没有错误被抛出......但文件没有被创建,当我把文件放在那里时,它没有被写入。我错过了什么吗?这是我的代码。
JavaScript
var ajaxData = { IGC: JSON.stringify(containerObj), filename: newFilePath };
$.post( "../php/generateIGC.php", ajaxData, function(data) {
$('#generated_textarea').val(data)
})
最初我试图解释发送的内容并将其写入文件。
PHP
<?php
$data = json_decode(stripslashes($_POST['IGC']), true);
$myFile = $_POST['filename'];
$handle = fopen($myFile, 'w'); //or die('Cannot open file: '.$myFile);
fwrite($handle,$data);
fclose($handle);
echo "File successfully created";
?>
然后我放弃了,只是试着写一个我为测试创建的文件,即使这样也行不通。
<?php
$data = 'dfjlsdkfsdlfkj';
$handle = fopen('test.txt', 'w'); //or die('Cannot open file: '.$myFile);
fwrite($handle,$data);
fclose($handle);
?>
我在浏览器中没有收到任何错误,帖子也成功了。我有一些东西不起作用的唯一指示是文件没有被写入或创建,当我访问(数据)时,我只得到一个PHP脚本的字符串。我在这里做错了什么?
更新:
我将php脚本更改为此
<?php
$data = json_decode(stripslashes($_POST['IGC']), true);
$myFile = $_POST['filename']
$handle = fopen('test.txt', 'w') or die('Cannot open file: '.$myFile);
fwrite($handle,$data);
fclose($handle);
return $data;
?>
现在我收到了错误:
kCFErrorDomainCFNetwork错误1。)
如果有帮助,这是帖子功能
function genCode() {
var path = $('#path_to_image').val();
var index = path.length
for (var i = 1; i<=3; i++) {
index = path.lastIndexOf('/',index-1)
}
var fileToCreate = path.substring(path.lastIndexOf('/')+1,path.lastIndexOf('.'))+'.igc'
var newFilePath = path.substring(0,path.lastIndexOf('.'))+'.igc'
containerObj["target_container"] = $('#target_container').val();
containerObj["img_path"] = path.substring(index+1);
containerObj["img_dims"] = {x: w, y: h};
containerObj["mode"] = $('#number_of_axes').val();
containerObj["sd"] = {x1: $('#sd_x1').val(), y1: $('#sd_y1').val(), x2: $('#sd_x2').val(), y2: $('#sd_y2').val()};
containerObj["number_of_graphs"] = $('#number_of_graphs').val();
var show_waypoints = false;
containerObj["show_waypoints"] = false;
//$('#generated_textarea').val("attachGraph.addGraph(" + JSON.stringify(containerObj, null, '\t') + ");");
var ajaxData = { IGC: JSON.stringify(containerObj), filename: newFilePath };
/* $.ajax({
type: "POST",
url: "../php/generateIGC.php",
data: ajaxData,
success: function() {
$('#generated_textarea').val("File created.")
}
})
})
*/ $.post( "../php/generateIGC.php", ajaxData, function(data) {
$('#generated_textarea').val(data)
} )
}
答案 0 :(得分:2)
我可以做很多事情,你应该知道你要编写的路径,并且你应该调整PHP的配置以显示错误,因为所有文件操作都会产生一个不会停止你的脚本的警告。 / p>
<?php
ini_set('display_errors', 1); // show errors
error_reporting(-1); // of all levels
date_default_timezone_set('UTC'); // PHP will complain about on this error level
if (!isset($_POST['IGC'])) { // Test if this was posted
echo "IGC not defined";
exit;
}
if (!isset($_POST['filename'])) { // Test if this was posted too
echo "filename not defined."
exit;
}
$data = json_decode(stripslashes($_POST['IGC']), true);
$myFile = $_POST['filename'];
$fileToWrite = 'test.txt';
if (!is_writable($fileToWrite)) { // Test if the file is writable
echo "Cannot write to {$fileToWrite}";
exit;
}
$handle = fopen($fileToWrite, 'w');
if (!is_resource($handle)) { // Test if PHP could open the file
echo "Could not open {$fileToWrite} for writting."
exit;
}
fwrite($handle,$data);
fclose($handle);
echo "File successfully created";
?>
此脚本作为上传PHP脚本应该可以为您提供有关问题的更多详细信息。您唯一需要确定的是您正在编辑的文件的位置,以及PHP是否有权写入它。
如果您不在文件名上使用绝对路径,PHP将尝试写入脚本目录。
答案 1 :(得分:0)
最后“解决”了这个问题。我不小心在本地运行html页面,而不是通过apache服务器,所以php无法运行。此外,txt文件没有写访问权限,我的代码最初有一些错误。一切都很傻。