我对以下内容有一点问题:
当我执行这一行时:
echo exec(createDir($somevariable));
我收到此错误:
Warning: exec() [function.exec]: Cannot execute a blank command in /home/mydir/myfile.inc.php on line 32
有任何想法吗。
谢谢。
您误解了 exec() 的目的。如果您只想创建一个目录,那么您应该使用 mkdir()。
我猜你的createDir()
函数没有返回任何东西。也可能值得检查$somevariable
也设置为合理的东西
我想我已经从其他帖子和评论中得出了你真正想做的事情:
我认为createDir()
是您自己编写的 PHP 函数。它不仅仅是创建一个目录——它会填充它,这可能需要一些时间。
出于某种原因,您认为下一个命令在createDir()
完成工作之前运行,并且您认为通过调用createDir()
usingexec()
可以避免这种情况。
如果这是出路,请在评论中告诉我,我将删除此答案。
返回后似乎不太可能createDir()
真的继续工作(如果确实如此,那么我们称之为“异步”)。这将需要程序员不遗余力地使其异步。所以检查那个假设。
即便如此,exec()
也不是为了调用 PHP 函数。它用于调用 shell 命令(您在命令提示符下键入的那种东西)。正如我们许多人所观察到的,除非您非常小心,否则应避免这种情况——风险在于您允许用户执行任意 shell 命令。
如果您确实必须等待异步函数完成,有几种方法可以完成。
第一种方式要求异步函数以一种顺从的方式编写。一些 API 允许您启动一个异步作业,它会给您一个“句柄”,然后做一些其他的事情,然后从句柄中获取返回状态。就像是:
handle = doThreadedJob(myParam);
# do other stuff
results = getResults(handle);
getResults 会等到工作完成。
第二种方法不太好,可以在 API 不太有用的情况下使用。不幸的是,问题在于找到一些线索表明工作已经完成,然后轮询直到完成。
while( checkJobIsDone() == false ) {
sleep(some time interval);
}
我猜 createDir() 没有返回值。
尝试exec("mkdir $somevariable");