我有一个图片托管服务,人们上传离线(他们上传到另一台计算机,如没有互联网访问的电台)然后我们同步图像(他们在这个阶段没有水印),他们现在不被批准
有一个管理区域,用户可以去批准图像,我们将在此阶段应用水印。
我想知道使用PHP(一次)为2000ish图像添加水印最好的方法。创建一个系统守护进程并等待响应是一个好主意还是?
答案 0 :(得分:1)
在cron中设置脚本,并在后台执行。
答案 1 :(得分:1)
对于如此大量的文件执行此类任务对于php来说并不是一个好主意,至少当您计划通过HTTP执行该脚本时。原因是php脚本超时,通常为30秒(不应设置得太高)。
解决此类问题的最佳方法是创建一个直接在服务器上运行的脚本或守护程序,并自动转换任何新图像(或在被告知之后)。因此,即使当前的PHP脚本已经完成,它仍将继续运行。然后,后台进程可以将统计信息更新到数据库中,php脚本可以获取该数据库以获取有关该进程的信息。
另一种方式,我个人用于私人图库的缩略图生成,就是将大量任务分成较小的作业,这些作业可以在30秒限制内轻松处理。在我的情况下,我将其限制为每次执行50张图片(它可能可以处理更多,但我想要安全)。所以基本上我调用我的脚本,它从数据库中获取前50个尚未完成的文件名,在每个文件上执行它的操作并返回。然后我只需单击F5让脚本执行下一个50个文件。使用〜2000个图像,自动化F5命中可能是明智之举,例如,只需在页面上放置一个javascript就可以在完全加载后刷新它。
如果您有可能选择第一个选项,那么请执行此操作,但我发现我的第二个选项对于共享主机(我目前使用它的位置)非常有用。
答案 2 :(得分:0)
最好的办法是在后台运行Cron作业/守护进程。但是,只需使用带有ImageMagick的简单bash脚本,而不是PHP脚本。也就是说,如果您不必访问数据库或任何东西来获取图像。
如果你做需要访问数据库,请使用PHP,但调用shell_exec()
在正确的图像上运行bash脚本。如果你在Windows服务器上,你显然会使用批处理脚本。