PHP:当json_编码失败时,从服务器向客户端返回字符串
我正在编写一个应用程序,它向我的服务器发送一些数据,以便生成一个PDF文件。为此,我使用shell_exec调用apprapiate latex编译命令。我总是在服务器中使用以下代码在客户机中显示日志的输出(为了显示问题,这过于简单): 但是,每隔一段时间,日志就会包含一个字符,该字符将破坏json_编码。也就是说,json_enconde($ret)将为false 是否有其他方式将信息(作为文本或文件)发送给客户 编辑: 由于输出是Latex编译的输出,因此很难简单地复制。但是,当我被要求提供一个示例时,我设法使用日志文件(由pdflatex命令自动保存)和这个最小的php脚本创建了这个最小的示例 这是PHP脚本:PHP:当json_编码失败时,从服务器向客户端返回字符串,php,json,Php,Json,我正在编写一个应用程序,它向我的服务器发送一些数据,以便生成一个PDF文件。为此,我使用shell_exec调用apprapiate latex编译命令。我总是在服务器中使用以下代码在客户机中显示日志的输出(为了显示问题,这过于简单): 但是,每隔一段时间,日志就会包含一个字符,该字符将破坏json_编码。也就是说,json_enconde($ret)将为false 是否有其他方式将信息(作为文本或文件)发送给客户 编辑: 由于输出是Latex编译的输出,因此很难简单地复制。但是,当我被要求提供
$trial = "trial.log";
$handle = fopen($trial,"r");
$data = fread($handle,filesize($trial));
if ($handle === false){
$errors = error_get_last();
$ret["error"] = "Could not open $trial for reading. Type: " . $errors["type"] . " MSG: " . $errors["message"];
return;
}
fclose($handle);
echo "Done reading<br>";
if (json_encode($data) === false){
echo "I've failed";
}
else{
echo "All good";
}
$trial=“trial.log”;
$handle=fopen($trial,“r”);
$data=fread($handle,filesize($trial));
如果($handle==false){
$errors=error_get_last();
$ret[“error”]=“无法打开$trial进行读取。键入:”.$errors[“Type”]。“MSG:”.$errors[“message”];
返回;
}
fclose($handle);
回显“完成阅读
”;
if(json_encode($data)==false){
呼应“我失败了”;
}
否则{
呼应“一切都好”;
}
这是文件trial.log
我已经在我的浏览器中测试过了,我得到了失败的答案。然而,我绕过了这个问题。(请参阅我的答案)因此,在尝试了几件不同的事情之后,我开始尝试将pdflatex生成的日志文件发送到客户端。因此,y没有返回文件的内容(与命令返回的内容相同),而是返回了日志文件的路径。然后在我的浏览器中,我使用了以下代码:
// Getting the base URL
var url = window.location.href;
var l = url.length;
while (l--){
if (url[l] == '/') break;
}
url = url.substring(0,l);
// Creating the URL for the log file.
var logfile = url + obj.logfile;
logfile是我的服务器中日志文件的相对路径。然后我使用以下命令将文件加载到文本区域
// Loading the log file.
$.ajax({
type: "GET",
url: logfile,
success: function(text) {
document.getElementById("pdflatex_out").value = text;
},
error: function() {
document.getElementById("pdflatex_out").value = "Error. please contact the administrator";
}
});
当
$textinput
为时会发生什么;rm-rf/*
?我不理解沙土。首先,当我以编程方式从不依赖于用户的值创建$texinput的值时,它永远不会是这样。第二,这与我的问题有什么关系?如果你指定了值,并且它不受发送到服务器的数据的影响。我从未对数组进行过json\u encode
编码,除非它包含复杂的对象。所以我很想知道,$log
中到底是什么让它失败了。。。它很大吗?它包含二进制数据吗?4字节utf8(例如smileys)?如果(!json_encode($ret))文件_put_内容('fail.log',var_export($log,true)),您能用类似这样的东西引发错误并发布结果吗代码>哦-我们还需要知道你是如何在客户端获取这些信息来回答你的问题-当你echo
backjson_encode
你实际上只发送纯文本-接收端获取这些纯文本,然后将其解释为“特殊的”(即数组)。。。这对于您的目的来说可能是完全不必要的(但应该是完全可能的)
// Loading the log file.
$.ajax({
type: "GET",
url: logfile,
success: function(text) {
document.getElementById("pdflatex_out").value = text;
},
error: function() {
document.getElementById("pdflatex_out").value = "Error. please contact the administrator";
}
});