php exec()错误

时间:2009-01-02 12:37:01

标签: php exec

我遇到以下问题:

执行此行时:

echo exec(createDir($somevariable));

我收到此错误:

Warning: exec() [function.exec]: Cannot execute a blank command in /home/mydir/myfile.inc.php on line 32

任何想法。

感谢。

6 个答案:

答案 0 :(得分:2)

exec()需要一个字符串参数,它将传递给您的操作系统执行。换句话说,这是服务器命令行的门户。

我不确定函数createDir()是什么,但除非它返回一个有效的命令行字符串,否则它可能会失败。

在Linux中,您可能希望执行类似

的操作
exec('/usr/bin/mkdir '.$path);

......另一方面,您应该不惜一切代价避免使用exec()。你可以在这里做些什么,看看mkdir()

答案 1 :(得分:0)

使用exec,您可以执行系统调用,就像使用命令行一样。它对执行PHP函数没有任何作用。

要创建目录,您可以执行以下操作:

exec( 'mkdir [NAME OF DIRECTORY]' );

答案 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");