PHP:当json_encode失败时,将字符串从服务器返回到客户端

时间:2015-06-30 18:31:14

标签: php json

我正在编写一个应用程序,它将一些数据发送到我的服务器以生成PDF文件。为此,我使用shell_exec来调用approapiate latex compilation命令。我总是通过在服务器中使用以下代码来显示客户端的日志输出(这是过度简化以显示问题):

$log = shell_exec("cd ../../template; pdflatex $texinput;");
$ret["log"] = $log;
echo json_encode($ret);

然而,每隔一段时间,日志就会包含一个破坏json_encode的字符。那就是json_enconde($ ret)将是假的。

有没有其他方法可以将信息(如文本或文件)发送给客户?

编辑: 由于输出是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.log

https://www.dropbox.com/s/04ejx5s1mj0ojj2/trial.log?dl=0

我在浏览器中测试了它,但是我失败了。但是我绕过了这个问题。 (见我的回答)

1 个答案:

答案 0 :(得分:0)

因此,在尝试了几个不同的事情后,我尝试将pdflatex生成的日志文件发送到客户端。因此,不是返回文件的内容(与命令返回的内容相同),而是返回日志文件的路径。然后在我的浏览器中我使用了这段代码:

.main{ width:100%;}
.sub{width:23%; position:relative; background:green; height:80px; float:left; margin:1%;}
.sub .error{position:absolute; width:100%; left:0px; top:0px; background:red; height:100px; z-index:10;}
.sub .error .close{position:absolute; right:10px; top:10px; text-align:center; font-size:11px; background:#FF0; height:20px; width:35px; cursor:pointer; content:"";}

obj.logfile是我的服务器到日志文件的相对路径。然后我使用以下内容将文件加载到文本区域。

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<div class="main">
  <div class="sub"></div>
  <div class="sub">
    <div class="error">
      <span class="close">close</span>
    </div>
  </div>
  <div class="sub"></div>
  <div class="sub"></div>
  <div class="sub"></div>
  <div class="sub"></div>
  <div class="sub"></div>
  <div class="sub"></div>
</div>