Imagemagick - PHP批量转换缩略图没有服务器压力?

我一直在使用 WPDM 为我的客户创建文件系统。 不幸的是,WPDM没有像psd,ai,pdf等文件类型的任何预览功能,所以我一直试图通过使用 ImageMagick 。</ p>

我可能以错误的方式接近这一点,因为我在使用代码时遇到了一个重大问题。 它只会在内部服务器错误崩溃之前创建第一个缩略图(或两个,具体取决于psds文件大小),甚至一个缩略图使网站速度极慢。</ p>

  /  /函数为WPDM包中的所有文件创建预览图像
_function_previews(){
$ file_list = uploaded_files_path();
$ preview_image_path_list = array();

foreach($ file_list as $ file){\ n $ imagick = new Imagick();
$ img = wp_get_image_editor($ file);
$ imagick-&gt; readImage($ file);
$ filenamelres = $ img-&gt; generate_filename('thumb',ABSPATH .'wp-content / uploads / thumbs /','png');

if(!is_wp_error($ imagick)){
if(!file_exists($ filenamelres)){
$ imagick-&gt; setIteratorIndex(0);
$ imagick-&gt; thumbnailImage(200,0);
$ imagick-&gt; writeImage($ filenamelres);
$ preview_image_path_list [] = $ filenamelres;
} else {}
其他 {
$ preview_image_path_list [] = $ filenamelres;
}

$ imagick-&gt; destroy();

返回$ preview_image_path_list;
}
</ code> </ pre>

这里有不同的路线。 我能不像我正在做的那样对服务器施加压力吗?</ p>
</ div>

展开原文

原文

I've been using WPDM to create a file system for a client of mine. Unfortunately WPDM doesn't have any preview functionality for filetypes like psd, ai, pdf, etc so I've been trying to create this functionality myself by using ImageMagick.

I'm probably approaching this the wrong way, as I have a major issue with using the code. It only creates the first thumbnail (or two, depending on the psds file size) before it crashes with an Internal Server Error and even one thumbnail makes the site incredibly slow.

// Function to create preview images for all files in WPDM package
function create_previews() {
    $file_list = uploaded_files_path();
    $preview_image_path_list=array();

    foreach ($file_list as $file) {
        $imagick = new Imagick();
        $img = wp_get_image_editor($file);
        $imagick->readImage($file);
        $filenamelres = $img->generate_filename('thumb', ABSPATH.'wp-content/uploads/thumbs/', 'png' );

        if ( ! is_wp_error( $imagick ) ) {
            if ( ! file_exists($filenamelres) ) {
                $imagick->setIteratorIndex(0);
                $imagick->thumbnailImage(200, 0);
                $imagick->writeImage($filenamelres);
                $preview_image_path_list[] = $filenamelres;
            } else {}
        } else {
            $preview_image_path_list[] = $filenamelres;
        }

        $imagick->destroy(); 
    }

    return $preview_image_path_list;
}

Is there a different route to take here. Could I do the same without stressing the server as much as I'm doing?

duanniubeng2265
duanniubeng2265 您也可以考虑将其外包-有些服务(如cloudconvert.com)可以为您做到这一点。他们经常拥有为这类东西而构建的强大服务器。
5 年多之前 回复
doudun3910
doudun3910 不客气,不受欢迎。
5 年多之前 回复
dtjw6660
dtjw6660 我在error_log中没有收到任何PHP错误,只是看起来完全不相关的通知。我肯定会查看cron,因为它看起来就像我最初想要的东西,谢谢你偷看我的兴趣呵呵!
5 年多之前 回复
du4822
du4822 在任何非平凡大小的系统上,缩略图在后台生成,而不是在Web服务器进程中生成。切换到cron并在此期间使用占位符缩略图。值得找出触发“内部服务器错误”的内容-您的日志中会出现真正的PHP错误。我猜Apache已经超时了。
5 年多之前 回复

1个回答



根据我的评论:在任何非平凡大小的系统上,缩略图应该在后台生成,而不是在Web服务器中生成 处理。 切换到cron或作业队列,并在此期间使用占位符缩略图。</ p>

有必要找出触发“内部服务器错误”的内容 - 您可能需要调出错误 记录以确保记录。</ p>
</ div>

展开原文

原文

As per my comment: on a system of any non-trivial size, thumbnails should be generated in the background, not within the web server process. Switch to cron or a job queue, and use a placeholder thumbnail in the meantime.

It's worth finding out what triggered the "Internal Server Error" though - you might need to turn up your error logging to ensure it is recorded.

drxzpo70788179614
drxzpo70788179614 可能不在你的舞台@michael,但最终是的。 将长时间运行的进程移动到后台任务的主要目的是确保Web请求快速返回(并且不会超时)。 完成此操作后,您应该随着用户数量的增加密切关注服务器负载,如果负载变得非常高,则应该将数据库(或图像处理器)移动到自己的服务器。
5 年多之前 回复
dongshou2017
dongshou2017 所以cron是一个基于时间的作业调度程序,这并不意味着服务器在cron事件发生时仍然会受到重击?
5 年多之前 回复
douwei1944
douwei1944 如果您之前没有使用过cron,请注意一些复杂的问题 - 例如,您的所有路径都必须完全限定(因此,如果您以前使用/images/myimage.png,那么现在必须使用/ var / app / public / images / myimage.png(或者你从root开始的路径))。 你还必须在日志上特别勤奋 - 你再也看不到你的“echo”或“var_dump”了。 并且php可能会将错误日志存储在cron的不同位置,而不是存储在Web服务器上。 最后,权限可能不同 - 有时cron由与Web服务器不同的用户运行 - 这可能会导致问题。
5 年多之前 回复
dongpu3347
dongpu3347 我认为我没有得到任何错误的原因是因为我启用了调试。 在我搬到cron之前,我会做一些测试来掌握发生的事情:)
5 年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐