Exec()命令和脚本流程

时间:2016-03-17 18:12:33

标签: php exec

我只是不确定... exec(....)的脚本是否等到exec()完成后再继续?

例如我的脚本会像这样流动....

  1. 将PDF文件从AWS复制到网络服务器
  2. 将PDF文件转换为JPG(exec())
  3. 将JPG上传到AWS
  4. 从服务器删除这两个文件。
  5. 重复10,000次......

    在exec完成之前,我是否需要编写一些内容来暂停代码?或者可以使用exec命令,移动文件,然后删除文件?我担心的是程序会在转换文件之前尝试删除这些文件。

    我希望这很清楚,谢谢......

2 个答案:

答案 0 :(得分:0)

AFAIK exec()(如果你正在谈论系统调用)是一个阻塞调用,因此将阻止进一步执行脚本(无论它是什么语言!)。 您可以使用&并将Stderr / Stdout重定向到/ dev / null,以便在后台运行进程并等待完成。

最好的办法是异步进行:

fork() --- Child Process
if fork returns 0 
 exec() --- Command you want to process your jpegs with
in parent wait() for exec to complete

答案 1 :(得分:0)

来自php doc:http://se1.php.net/manual/en/function.exec.php

  

注意:

     

如果程序是使用此功能启动的,则为了它   继续在后台运行,程序的输出必须是   重定向到文件或其他输出流。没有这样做会   导致PHP挂起,直到程序执行结束。

如果您处于循环中,并且想要删除文件后,为什么不在循环结束后删除文件(如果您有足够的存储空间)

您还可以监控3操作的返回,并在确定文件已上传时删除。

symfony组件流程可以帮助您管理此流http://symfony.com/doc/current/components/process.html

希望有所帮助