就PHP而言,我是一个绝对的初学者,但我试图使用PHP GD /图像显示来制作一些图形。
我尝试将<?php echo "<p>Hello, Word!</p>" ?>
包含在HTML文件中,并且没有问题。接下来,我尝试了here中的示例并将其复制到了button.php,
<?php
header("Content-type: image/png");
$string = $_GET['text'];
$im = imagecreatefrompng("images/button1.png");
$orange = imagecolorallocate($im, 220, 210, 60);
$px = (imagesx($im) - 7.5 * strlen($string)) / 2;
imagestring($im, 3, $px, 9, $string, $orange);
imagepng($im);
imagedestroy($im);
?>
然后我将test_button.html改为
<html>
<head>
<title>Testing button.php</title>
</head>
<body>
<p>It should be between here...</p>
<p align="center">
<img src="button.php?text=text">
</p>
<p> ... and here</p>
</body>
</html>
当我用浏览器打开文件时,我得到一个破损的图像符号。如果我尝试上传php文件,我会收到消息
无法显示图片http://.../button.php?text=text,因为它包含错误。
我在安装了php5,apache等的raspberry pi上试了一下。在具有LAMP的服务器上。甚至在我的笔记本电脑上。全部运行Debian。
在raspberry pi上,我尝试了phpinfo()并启用了GD。 Libpng也是。
我在这里或其他网站上看过,但没有类似的错误与我有关。在PHP文件中,我在<?php
之前没有空格/空行,而?>
之后也没有。
我确定我错过了一个基本步骤。但我无法弄清楚错误是什么。在另一个类似的测试中,没有header()
(注释掉),我出现了一堆字符。
如前所述,我试图检查vim是否由于编码而没有添加一些奇怪的字符,我测试并得到了
$ file -i button.php
button.php: text/x-php; charset=us-ascii
并与另一位编辑打开。但不,再也没有。
有人能指出我正在做的(可能是显而易见的)错误吗?
从第一条评论进行修改,评论header(...)
,删除跟踪?>
并添加error_reporting(E_ALL); ini_set('display_errors', 1);
当我到达button.php?text = text时,我得到了
Warning: imagecreatefrompng(images/button1.png): failed to open stream: No such file or directory in /var/www/therm/button.php on line 6
Warning: imagecolorallocate() expects parameter 1 to be resource, boolean given in /var/www/therm/button.php on line 7
Warning: imagesx() expects parameter 1 to be resource, boolean given in /var/www/therm/button.php on line 8
Warning: imagestring() expects parameter 1 to be resource, boolean given in /var/www/therm/button.php on line 9
Warning: imagepng() expects parameter 1 to be resource, boolean given in /var/www/therm/button.php on line 10
Warning: imagedestroy() expects parameter 1 to be resource, boolean given in /var/www/therm/button.php on line 11
答案 0 :(得分:1)
运行调试建议后,我意识到函数imagecreatefrompng()
无法打开流。这让我意识到了明显的错误,即该函数旨在在已有的PNG文件上添加一些文本。这是在源上指出的(如果我花时间实际阅读所有内容)
这&#34; text&#34;字符串并将其叠加在基本图像的顶部,在这种情况下是&#34; images / button1.png&#34;并输出结果图像
所以我创建了一个images/button1.png
(实际上是来自网络),重新启用header()
,这次它有效。
感谢您的评论,他们帮助我了解了PHP的一些调试工具。