【问题标题】:getimagesize() function not working with linuxgetimagesize() 函数不适用于 linux
【发布时间】:2016-08-03 01:48:46
【问题描述】:

我有这个功能

public static function upload($path_folder, $input_file_name) {

    $photo_file = $_FILES[$input_file_name]; // FILE NAME
    $photo_name = $photo_file['name']; // PHOTO NAME
    $photo_tmp_name = $photo_file['tmp_name'];  // TMP NAME
    $photo_extension = pathinfo($photo_name, PATHINFO_EXTENSION); // EXTENSION
    // soon GIFs

    $rand_num = random_int(1, 3);
    switch ($rand_num) {
        case 1:
            $hash = mb_strtoupper(Hash::create(), 'UTF-8');
        break;
        case 2:
            $hash = mb_strtolower(Hash::create(), 'UTF-8');
        break;
        case 3:
            $hash = str_shuffle(Hash::create());
        break;
        default:
            $hash = Hash::create();
        break;
    }

    $photo_with_extension = $hash . '.' . $photo_extension; // NEW FILE NAME
    $factory_destination = 'photos/factory/' . $photo_with_extension; // FACTORY

    if(move_uploaded_file($photo_tmp_name, $factory_destination)) {
    if(file_exists($factory_destination)) {
    if(
        ($photo_extension === 'jpg') ||
        ($photo_extension === 'jpeg') ||
        ($photo_extension === 'JPG') ||
        ($photo_extension === 'JPEG') ||
        ($photo_extension === 'png') ||
        ($photo_extension === 'PNG')
    ) {

        if(
            ($photo_extension === 'jpg') ||
            ($photo_extension === 'jpeg') ||
            ($photo_extension === 'JPG') ||
            ($photo_extension === 'JPEG')
        ) {
            if(imagecreatefromjpeg($factory_destination)) { // JPEG
                $photo_create = imagecreatefromjpeg($factory_destination);
            }
        }

        if(
            ($photo_extension === 'png') ||
            ($photo_extension === 'PNG')
        ) {
            if(imagecreatefrompng($factory_destination)) { // PNG
                $photo_create = imagecreatefrompng($factory_destination);
            }
        }

        if(getimagesize($photo_tmp_name)) {

            list($photo_width, $photo_height) = getimagesize($photo_tmp_name); // WIDTH & HEIGHT
            $photo_new_width = 300; // NEW WIDTH
            $photo_new_height = 300;
            //$photo_new_height = ($photo_height / $photo_width) * $photo_new_width; // NEW HEIGHT
            $true_color = imagecreatetruecolor($photo_new_width, $photo_new_height); // TRUE COLOR

            if(imagecopyresampled($true_color, $photo_create, 0, 0, 0, 0, $photo_new_width, $photo_new_height, $photo_width, $photo_height)) {


                $photo_copy = imagecopyresampled($true_color, $photo_create, 0, 0, 0, 0, $photo_new_width, $photo_new_height, $photo_width, $photo_height); // COPY
                    $mime = mime_content_type($factory_destination);

                    if(($mime === 'image/jpeg') || ($mime === 'image/png')) {

                        switch ($path_folder) {
                            case 1:
                                $folder = 'profile';
                            break;
                            case 2:
                                $folder = 'identities';
                            break;

                            default:
                                $folder = 'errors';
                            break;
                        }

                        $new_destination = 'photos/' . $folder . '/';
                        //$image = imagecreatefromstring(file_get_contents($photo_tmp_name));
                        $exif = exif_read_data($factory_destination);
                        if(!empty($exif['Orientation'])) {
                            switch($exif['Orientation']) {
                                case 8:
                                    $true_color = imagerotate($true_color,90,0);
                                    break;
                                case 3:
                                    $true_color = imagerotate($true_color,180,0);
                                    break;
                                case 6:
                                    $true_color = imagerotate($true_color,-90,0);
                                    break;
                            }
                        }
                        if(imagejpeg($true_color, $new_destination . $photo_with_extension, 75)) { // DESIGNATED PATHS
                            imagedestroy($true_color); // return 

                            if(unlink($factory_destination)) {
                                return $photo_with_extension; // AUTO UPDATE ADMIN THAT THERE IS A PROBLEM
                            } else { return 'unlink last'; }        
                        } else { return 'imagejpeg'; }
                    } else { return 'mime'; }
                /*move*/ 
            } else { return 'resampled'; }
        } else { return 'get image:' . $photo_tmp_name; }
    } else { return 'wrong ext'; }
    } else { return 'default2.png'; }
    } else { return 'move'; }
    return empty($photo_with_extension) ? '' : 'false';
}

该函数在 move_uploaded_file() 之后什么都没有发生。

这是在生产、支持 GD 且兼容的 Linux 服务器上。你认为我的代码哪里出错了?不过,这在我的本地主机上工作得很好。

确切地说,imagejpeg() 是不工作的那个

新信息;

似乎问题发生在getimagesize($photo_tmp_name)它返回false

更新信息:

当我回显时,getimagesize() 上给出的 tmp_name 是正确的,但它返回 false。

【问题讨论】:

标签: php linux gd photo


【解决方案1】:

如果在move_uploaded_file() func 之后,应该销毁tmp_file,你可以将tmp_file 替换为已经移动的文件,因为php 将执行被阻塞的进程,所以这样做是安全的!

【讨论】:

  • 我不明白你想说什么。
  • imagecreatefromjpeg,源文件,不要使用[tmp_name]文件,使用你已经上传文件的源,或者在你move_uploaded_file()函数之前执行这个
  • 我需要在使用 imagecreatefromjpeg 之前使用 move_upload_file() 吗?你是这个意思吗?
  • 不工作,尝试使用哈希码移动文件并使用它来创建 jpeg/png 但没有任何反应
  • 在你 move_uploaded_file 之后,你应该会发现文件已经存在于你的服务器上,所以试试 file_exists($file),如果是这样,那么 imagecreatefromjpeg($file),我想不会有其他解释了,如果你能得到文件
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-03-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多