Try / Catch似乎适用于$ _POST但不适用于会话变量PHP

时间:2017-04-11 23:02:08

标签: php post session-variables

我正在开发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,这是一直困扰我的障碍之一。也许答案显而易见,但我当然处于停滞状态。

感谢所有输入,谢谢!

1 个答案:

答案 0 :(得分:0)

在设置类的对象之前尝试此操作         $ _POST [&#39; PIX&#39;] = $ _ SESSION [&#39; IMAGE_FILENAME&#39;]; 所以你手动设置POST变量并使用缩略图类假设它