题
我遇到以下问题:
执行此行时:
echo exec(createDir($somevariable));
我收到此错误:
Warning: exec() [function.exec]: Cannot execute a blank command in /home/mydir/myfile.inc.php on line 32
任何想法。
感谢。
其他提示
使用 exec ,您可以像执行系统调用一样执行系统调用使用命令行。它对执行PHP函数没有任何作用。
要创建目录,您可以执行以下操作:
exec( 'mkdir [NAME OF DIRECTORY]' );
我猜你的 createDir()
函数不会返回任何内容。可能还值得检查 $ somevariable
也设置为合理的
你误解了exec()的目的。如果您只想创建一个目录,那么您应该使用mkdir()。
我想我已经从其他帖子和评论中得出了你真正想要做的事情:
我认为 createDir()
是你自己编写的PHP函数。它不仅仅是创建一个目录 - 它填充它,这可能需要一些时间。
出于某种原因,您认为下一个命令在 createDir()
完成工作之前运行,并且您认为通过使用 exec调用
你可以避免这种情况。 createDir()
()
如果有消息,请在评论中告诉我,我将删除此答案。
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");