2012-03-28 52 views
3

请帮我解决我在生产服务器上遇到的这个问题。我启动了一个应用程序,只有在检查到目录不存在的情况下才能将图像保存到目录中。php执行shell命令只在重用模式下给出随机输出

要检查它是否已经存在,我用下面的命令 find $filePath -name $fileInitial*

我很惊讶地看到,这一切都很好的开发和QA但在实际环境中,从50例,其中5例是即使文件存在,也会返回空白。

我试着用execshell_exec,passthrusystem替换反引号运算符。我甚至试图用ls代替find命令,但仍然没有收获。

请建议可以做些什么?

+3

我假设你使用的是shell命令,因为glob()或file_exists()函数没有做你需要它做的事情? – ChrisK 2012-03-28 18:20:23

+0

鉴于末尾带有'*',一个exec()调用将使shell查找'whatever *',并在找到任何有机会运行之前立即返回“不匹配”。 – 2012-03-28 18:34:15

+0

@Charanjeet Kaur:请选择其中一个答案,看起来您的问题已被回答。 – hakre 2012-06-22 10:15:32

回答

2

根据你的代码,我强烈建议尽可能避免exec/shell_exec。

如果不考虑安全性,它会给整个系统带来非常大的安全风险。

不知道为什么你正在尝试处理的实际命令有问题,但我的建议是在php中使用file_exists()glob()函数,而不是手动进入文件系统。

+0

我也推荐这种方法,并确定建议不要执行shell命令。 file_exists()和glob()通常也适用于Windows和Linux服务器,其中exec命令通常不会。 – danieltalsky 2012-03-28 19:50:42

0

你是否设置了:ignore_user_abort(true);set_time_limit()合理吗? 请试用popen()。我总是发现它更容易正确连接。

1

谢谢大家。你的建议真的有效。它与glob()一起运行良好。

可能是通过PHP执行shell命令的原因不等待足够的时间结果或它与运行php的CGI模式有关。

请分享您的想法。

+0

它可能与文件系统没有更新,因为上载后发现实际找到它,或者它可能是由于某种原因执行失败 - 无论哪种方式避免exec&shell_exec在所有成本(非常非常糟糕的事情一般使用) - 哦,请接受上面的答案:) – ChrisK 2012-03-30 10:47:05