我正在研究一个php
教程,其中缩略图生成页面允许我从服务器上的目录下拉列表中进行选择,并且击中submit
按钮,给定大小的缩略图是使用自定义缩略图类创建的(缩略图会覆盖原始图像,这对我现在所做的事情来说很好)。这是基本的东西,并按预期工作。
页代码:
<?php
$folder = '../images/';
use ClassFiles\Image\Thumbnail;
if (isset($_POST['create'])) {
require_once('ClassFiles/Image/Thumbnail.php');
try {
$thumb = new Thumbnail($_POST['pix']);
$thumb->setDestination('../images/');
$thumb->setMaxSize(400);
$thumb->create();
$messages = $thumb->getMessages();
} catch (Exception $e) {
echo $e->getMessage();
}
}
?>
<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
<title>Thumb</title>
</head>
<body>
<?php
if (isset($messages) && !empty($messages)) {
echo '<ul>';
foreach ($messages as $message) {
echo "<li>$message</li>";
}
echo '</ul>';
}
?>
<form method="post" action="">
<p>
<select name="pix" id="pix">
<option value="">Select an image</option>
<?php
$files = new FilesystemIterator('../images/');
$images = new RegexIterator($files, '/\.(?:jpg|png|gif)$/i');
foreach ($images as $image) {
$filename = $image->getFilename();
?>
<option value="<?= $folder . $filename; ?>"><?= $filename; ?></option>
<?php } ?>
</select>
</p>
<p>
<input type="submit" name="create" value="Create Thumbnail">
</p>
</form>
</body>
</html>
自定义缩略图类是漫长的,为简洁起见,我不会在这里张贴,除非要求,因为它工作正常。
所以这里的问题:
我决定把图像路径和图像文件名信息从我一直工作在上传页面,并将它们存储在可采取的缩略图生成页面会话变量。在缩略图生成网页代码进行了修改,如下所示:
<?php
require_once('includes/session_admin.php');
$folder = $_SESSION['image_path'];
use ClassFiles\Image\Thumbnail;
$getSize = getimagesize($_SESSION['image_path'] . $_SESSION['image_filename']);
$imagePath = $_SESSION['image_path'];
$imageFilename = $_SESSION['image_filename'];
if ($getSize[0] > 400) {
require_once('ClassFiles/Image/Thumbnail.php');
try {
$thumb = new Thumbnail($imageFilename);
$thumb->setDestination($imagePath);
$thumb->setMaxSize(400);
$thumb->create();
$messages = $thumb->getMessages();
} catch (Exception $e) {
echo $e->getMessage();
}
} else {
echo "Image is " . $getSize[0] . "px wide and is OK!";
}
?>
<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
<title>Thumb</title>
</head>
<body>
<?php
if (isset($messages) && !empty($messages)) {
echo '<ul>';
foreach ($messages as $message) {
echo "<li>$message</li>";
}
echo '</ul>';
}
// this was just to test that the session variables were correct
echo $_SESSION['image_path'] . $_SESSION['image_filename'];
echo '<br>';
print_r(getimagesize($_SESSION['image_path'] . $_SESSION['image_filename']));
?>
<!--
Removed the form...
-->
</body>
</html>
现在,而不是条件语句检查,看看$_POST
提交的代码(我认为)会自动检查是否图像,给出完整路径和文件名大于400像素,如果是,则使用自定义缩略图类调整图像大小。
但是,这会从缩略图类中引发错误,这是类似于教程中原始缩略图生成页代码的相同类。 这工作在原来的教程代码:
$thumb = new Thumbnail($_POST['pix']);
但不是当修改,以代替会话变量:
$thumb = new Thumbnail($imageFilename);
我看了又看任何建议,$_POST
是在这里需要,我检查了会话变量传递了正确的信息,他们是。但是从$_POST
切换到使用会话变量可以防止这种情况发挥作用。
正如你所看到的,我仍然在学习php,这是一直阻碍我的障碍之一。也许答案显而易见,但我当然处于停滞状态。
所有的输入赞赏,谢谢!
异常的错误消息是什么? – leepowers
它引发了三类内建的错误:'无法打开image_1.jpg.','image_1.jpg看起来不是图像.'和'无法确定文件的大小“。 – mileaminute