【问题标题】:Upload image and thumbnail via PHP通过 PHP 上传图片和缩略图
【发布时间】:2011-10-30 18:38:18
【问题描述】:

所以我需要一个非常简单的脚本来调整图像大小并在 PHP 中上传缩略图。请不要推荐图书馆,因为我希望能够轻松地编辑和学习。

我自己编写了一个小的 PHP 脚本来上传一张图片,并根据它在数据库中的 ID 命名,并打算让拇指像在名称末尾添加“拇指”一样简单(例如 123thumb. jpg),但我试图在缩略图中工作时有点毁了它。

这有点像:

mysql_query('
    INSERT INTO art (
        artist,
        title,
        extension)
    VALUES (
        1,
        "Penguins",
        "'.end(explode('.',$_FILES['art']['name'])).'")') ;
move_uploaded_file($_FILES['art']['tmp_name'],'images/'.mysql_insert_id()..end(explode('.',$_FILES['art']['name']))

【问题讨论】:

    标签: php image upload thumbnails


    【解决方案1】:

    糟糕的糟糕设计。 1. 没有对查询进行错误检查并在查询中使用原始用户提供的数据,从而导致了一个巨大的 sql 注入漏洞。 2. 使用原始用户提供的文件名来存储文件,即使它确实有一个数据库 ID 前置。 3. 盲目假设插入查询有效,这样 msyql_insert_id 可能不会返回任何内容。 3. 盲目假设 move 命令有效。

    更好/更安全的方法是:

    if ($_FILES['art']['error'] !== UPLOAD_ERR_OK) {
       die("Upload failed with error code " . $_FILES['art']['error']);
    }
    
    $filename = mysql_real_escape_string(basename($_FILES['art']['name']));
    mysql_query("INSERT .... VALUES (1, 'Penguins', '$filename', ...)") or die(mysql_error());
    
    move_uploaded_files(...) or die("Failed to move file");
    

    可以进行更多/更好的验证/错误处理,但这是比您的版本更安全/更可靠的框架。

    【讨论】:

    • 还应该指出它不限制上传到图像文件 - 可以通过上传.php 文件来利用。
    【解决方案2】:

    除了脚本的所有潜在漏洞(请参阅其他答案)之外,此页面可能对教您如何调整图像大小以获取缩略图非常有帮助。您将不得不使用像 GD(内置于 PHP)这样的库来调整图像大小。

    http://salman-w.blogspot.com/2008/10/resize-images-using-phpgd-library.html

    (在另一个 SO 问题中找到。)

    编辑:当然,不要忘记 PHP 手册。 http://php.net/manual/en/book.image.php

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-05-08
      • 1970-01-01
      • 2017-02-27
      • 1970-01-01
      • 2013-05-07
      • 1970-01-01
      • 2021-11-26
      • 2013-05-31
      相关资源
      最近更新 更多