PHP:当json_编码失败时,从服务器向客户端返回字符串

PHP:当json_编码失败时,从服务器向客户端返回字符串,php,json,Php,Json,我正在编写一个应用程序,它向我的服务器发送一些数据,以便生成一个PDF文件。为此,我使用shell_exec调用apprapiate latex编译命令。我总是在服务器中使用以下代码在客户机中显示日志的输出(为了显示问题,这过于简单): 但是,每隔一段时间,日志就会包含一个字符,该字符将破坏json_编码。也就是说,json_enconde($ret)将为false 是否有其他方式将信息(作为文本或文件)发送给客户 编辑: 由于输出是Latex编译的输出,因此很难简单地复制。但是,当我被要求提供

我正在编写一个应用程序,它向我的服务器发送一些数据,以便生成一个PDF文件。为此,我使用shell_exec调用apprapiate latex编译命令。我总是在服务器中使用以下代码在客户机中显示日志的输出(为了显示问题,这过于简单):

但是,每隔一段时间,日志就会包含一个字符,该字符将破坏json_编码。也就是说,json_enconde($ret)将为false

是否有其他方式将信息(作为文本或文件)发送给客户

编辑: 由于输出是Latex编译的输出,因此很难简单地复制。但是,当我被要求提供一个示例时,我设法使用日志文件(由pdflatex命令自动保存)和这个最小的php脚本创建了这个最小的示例

这是PHP脚本:

  $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
back
json_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";
  }
  });