我遇到以下问题:

执行此行时:

echo exec(createDir($somevariable));

我收到此错误:

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

任何想法。

感谢。

有帮助吗?

解决方案

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

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

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

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

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

其他提示

使用 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");

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top