我正在开发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
,代码(我认为)将自动检查以查看给定完整路径和文件名的图像是否宽于400px,并且如果是这样,请使用自定义缩略图类调整图像大小。
但是,这会抛出缩略图类的错误,这个类与本教程中的原始缩略图生成页面代码完全一致。 这适用于原始教程代码:
$thumb = new Thumbnail($_POST['pix']);
但不是在修改为取代会话变量时:
$thumb = new Thumbnail($imageFilename);
我已经查看并查找了此处需要$_POST
的任何建议,我检查了会话变量是否传递了正确的信息,而且它们是。但是,从$_POST
切换到使用会话变量会阻止此操作。
正如你所看到的,我还在学习php,这是一直困扰我的障碍之一。也许答案显而易见,但我当然处于停滞状态。
感谢所有输入,谢谢!
答案 0 :(得分:0)
在设置类的对象之前尝试此操作 $ _POST [&#39; PIX&#39;] = $ _ SESSION [&#39; IMAGE_FILENAME&#39;]; 所以你手动设置POST变量并使用缩略图类假设它