【问题标题】:php cannot be displayed because it contains errorsphp 无法显示,因为它包含错误
【发布时间】:2018-05-07 22:22:18
【问题描述】:

运行脚本时出现以下错误 php cannot be displayed because it contains errors

脚本,获取文件,调整大小,将其输出到屏幕和文件。

url_example:localhost/testimage.php?img=img_592_121_200.jpg

我已阅读大多数帖子并尝试了建议的解决方案。全部失败

文件不会输出到屏幕/浏览器,但可以保存到文件中。

这是代码,我去掉了所有的空白和空行。并在脚本中硬编码文件名

**我开始怀疑这是我的设置,但我什至不确定如何/从哪里开始寻找

编辑:简化为仅输出到屏幕

testimage.php

<?php
//session_start();
//ob_start();
ini_set("display_errors", "1");
error_reporting(E_ALL); 
Header('Content-type:image/jpeg');
//$cacheFile="mypicXXX.jpg";
//$cache_dir="cache/1/592/";
$img_dir="webspace/1/592/";
$img="img_592_121.jpg";
$id="$img_dir$img";
$src=imagecreatefromjpeg($id);
$new_width=200;
$new_height=77;
$width=600;
$height=1001;
$w_src=600;
$h_src=1001;
$img=imagecreatetruecolor($new_width,$new_height);
imagecopyresampled($img,$src,0,0,0,0,$new_width,$new_height,$w_src,$h_src);
imagejpeg($img,NULL,45);
//$cacheFile=$cache_dir.$cacheFile;
//imagejpeg($img,$cacheFile,45); 
imagedestroy($src);
imagedestroy($img);
//ob_end_flush();
?>

【问题讨论】:

  • 那么,您到底尝试了什么?第一个建议应该是删除header() 行并查看可能显示的错误消息。
  • 你关闭ob_start()开始的输出缓冲区了吗?另一种情况是错误消息看起来很奇怪。尝试在页面顶部添加error_reporting( E_ALL ); ini_set( 'display_errors', 1 )
  • 我尝试删除标题行,屏幕只是显示乱码。我尝试删除 ob_start,尝试过 Error_reporting 没有生成/显示我读过的任何错误,这些错误与 imagejpeg($img,'',45); 中的 '' 不一样;所以我将它设置为 imagejpeg($img,NULL,45);,没有帮助
  • 还有一点我要提的是,这个脚本以前可以工作。我今天才注意到它不起作用。大约一个月前,我升级到 PHP 版本 5.4.7,Apache 2.4,捆绑的 GD 版本(兼容 2.0.34)这是在我的本地主机上运行,​​家用计算机 windowsXP

标签: php image gd dynamic-image-generation


【解决方案1】:

已修复。解决方法(至少对我而言)是将文件另存为 “UTF-8 - NO NOM”。在我将其命名为“UTF-8”之前

整个文件格式让我迷失了,我需要在这些日子里阅读它

感谢大家的帮助!!!

【讨论】:

  • 啊,这说明了事情。 :) 我还认为您的意思是 UTF-8 NO BOM(字节顺序标记)。由于它是出现在文件顶部的字符,因此当您在该文件中使用 header() 或该文件包含在另一个 php 文件中时,您应该始终将文件保存在没有 BOM 的 UTF-8 中。更多信息:bugs.php.net/bug.php?id=22108
【解决方案2】:

您是否检查过在标头之前没有发送任何输出? 您可以尝试以下几件事:

  1. 将 header() 函数移到顶部。
  2. 删除缓存 (ob_start),看看你是否可以在没有它的情况下让它工作。
  3. 当你使用 ob_start 时,我猜你也想使用 ob_end_flush();最后?
  4. 尝试使用 NULL 作为 imagejpeg() 的第二个参数来执行 RAW 输出而不是写入文件。 (可能与写权限有关)

更新 您确定您检查了您指向的文件是否存在/或路径是否有效? 这适用于我的本地主机,运行默认的 xamp 安装(PHP3.5.1)

ini_set("display_errors", "1");
error_reporting(E_ALL);
Header('Content-type:image/jpeg');
//$cacheFile="mypicXXX.jpg";
//$cache_dir="cache/1/592/";
$img_dir="webspace/1/592/";
$img="test.jpg";
$src=imagecreatefromjpeg($img);
$new_width=200;
$new_height=77;
$width=600;
$height=1001;
$w_src=600;
$h_src=1001;
$img=imagecreatetruecolor($new_width,$new_height);
imagecopyresampled($img,$src,0,0,0,0,$new_width,$new_height,$w_src,$h_src);
imagejpeg($img,NULL,45);
//$cacheFile=$cache_dir.$cacheFile;
//imagejpeg($img,$cacheFile,45);
imagedestroy($src);
imagedestroy($img);

【讨论】:

  • 将标题移到顶部,删除了 ob_start。不,在标头之前没有发送任何内容。还是不行
  • 那么听起来 PHP 找不到你的文件 $cacheFile="mypic.jpg";确保使用正确的路径。我还用另一件事更新了我的答案。
  • 它正在写入缓存文件,并把它放在我的目录中,我就是无法让它输出到屏幕
  • 我已更改/尝试将 NULL 作为第二个参数,但仍然失败
  • 我刚刚在我的本地主机上测试了它,它运行良好。但是我没有使用任何图像路径 - 只是图像文件名,并将其放在与 php 脚本相同的文件夹中。用一些代码更新了我上面的答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-04
  • 2011-03-24
  • 2012-03-28
  • 1970-01-01
相关资源
最近更新 更多