我遇到以下问题:
执行此行时:
echo exec(createDir($somevariable));
我收到此错误:
Warning: exec() [function.exec]: Cannot execute a blank command in /home/mydir/myfile.inc.php on line 32
任何想法。
感谢。
答案 0 :(得分:2)
exec()
需要一个字符串参数,它将传递给您的操作系统执行。换句话说,这是服务器命令行的门户。
我不确定函数createDir()
是什么,但除非它返回一个有效的命令行字符串,否则它可能会失败。
在Linux中,您可能希望执行类似
的操作exec('/usr/bin/mkdir '.$path);
......另一方面,您应该不惜一切代价避免使用exec()
。你可以在这里做些什么,看看mkdir()
答案 1 :(得分:0)
答案 2 :(得分:0)
你误解了exec()的目的。如果您只想创建一个目录,那么您应该使用mkdir()。
答案 3 :(得分:0)
我猜你的createDir()
函数没有返回任何内容。可能还值得检查$somevariable
是否也设置为合理的
答案 4 :(得分:0)
我想我已经从其他帖子和评论中得出了你真正想要做的事情:
我认为createDir()
是您自己编写的PHP函数。它不仅仅是创建一个目录 - 它填充它,这可能需要一些时间。
出于某种原因,您认为下一个命令在createDir()
完成工作之前运行,您认为通过使用createDir()
调用exec()
可以避免这种情况。
如果有消息,请在评论中告诉我,我将删除此答案。
createDir()
似乎不太可能在它返回后确实继续工作(如果确实如此,那么我们称之为'异步')。它需要程序员尽力使其异步。所以检查一下这个假设。
即便如此,exec()
也不是用于调用PHP函数。它用于调用shell命令(在命令提示符下键入的内容)。正如我们许多人所观察到的那样,除非你非常小心,否则应该避免这种风险 - 允许用户执行任意shell命令的风险。
如果你真的必须等待异步函数完成,可以通过以下几种方法完成。
第一种方法要求以适合的方式编写异步函数。有些API允许你启动一个异步作业,它会给你一个'句柄',然后做一些其他的东西,然后从句柄获得返回状态。类似的东西:
handle = doThreadedJob(myParam);
# do other stuff
results = getResults(handle);
getResults会等到作业结束。
第二种方式不太好,可以在API不太有用时使用。不幸的是,这是一个找到工作完成的线索,并进行轮询直到它的问题。
while( checkJobIsDone() == false ) {
sleep(some time interval);
}
答案 5 :(得分:-2)
我猜测createDir()没有返回值。
尝试exec("mkdir $somevariable");