0

我对以下内容有一点问题:

当我执行这一行时:

echo exec(createDir($somevariable));

我收到此错误:

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

有任何想法吗。

谢谢。

4

6 回答 6

2

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

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

在 Linux 中,您可能想要执行类似的操作

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

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

于 2009-01-02T12:43:01.963 回答
0

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

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

exec( 'mkdir [NAME OF DIRECTORY]' );
于 2009-01-02T12:40:45.977 回答
0

您误解了 exec() 的目的。如果您只想创建一个目录,那么您应该使用 mkdir()。

于 2009-01-02T12:40:48.707 回答
0

我猜你的createDir()函数没有返回任何东西。也可能值得检查$somevariable也设置为合理的东西

于 2009-01-02T12:42:42.663 回答
0

我想我已经从其他帖子和评论中得出了你真正想做的事情:

我认为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);
}
于 2009-01-02T13:03:57.990 回答
-2

我猜 createDir() 没有返回值。

尝试exec("mkdir $somevariable");

于 2009-01-02T12:40:16.913 回答