2017-04-11 68 views
0

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

所有的输入赞赏,谢谢!

+0

异常的错误消息是什么? – leepowers

+0

它引发了三类内建的错误:'无法打开image_1.jpg.','image_1.jpg看起来不是图像.'和'无法确定文件的大小“。 – mileaminute

回答

0

在设置类的对象之前尝试此操作 $ _POST ['pix'] = $ _ SESSION ['image_filename']; 因此,您手动设置POST变量并将其用于缩略图类假设它

+0

我想完全省略'$ _POST'。我只是不确定为什么代码不会与会话变量一起工作。 – mileaminute

+0

也许是因为缩略图类本身处理帖子类型变量 – Osama

+0

可能,但我不确信,也没有专业知识来解决这个问题。 – mileaminute