我正在尝试创建一个从 Web 服务器运行的脚本,该脚本将通过 运行 php 文件exec()
,但我希望它在执行此操作时不在其前面添加php
。可以这样做吗?
使用 Windows 2008 和 XAMPP
答案1
不可以,php 文件不能在 Windows 中直接执行。您需要一种解决方法,例如将php filename.php
命令包装在批处理文件中。
答案2
这可以在 Windows 7 中实现 - 我不知道同样的想法是否适用于 Windows 2008 - 但是,这种方法的效果可能超过其好处。
本质上,您需要做的就是使php-cli.exe
默认程序打开 .php 文件。
我通过两种方式做到了这一点,但我不确定是否需要两种方式。
首先,将 php-cli.exe(或者我认为是 php.exe)设为打开 .php 文件的默认程序。
在 Windows 中,这相当于:右键单击 .php 文件,选择“打开方式...”,浏览并选择 php-cli.exe 可执行文件,然后“设置为默认值”。
我相信在 Windows 2008 中,可以通过控制面板 > 默认程序 > 将文件类型或协议与程序关联来访问此功能
一旦将 php-cli.exe 可执行文件设置为 .php 文件的默认应用程序,您就应该实现您的目标,但会产生一些副作用。
此时,如果您从命令提示符运行 scriptname.php,它将由 php-cli.exe 执行,并且输出显示在提示符下方 - 这可能是您想要的;但是,如果您双击该文件,它也将由 php-cli.exe(而不是您喜欢的编辑器)执行 - 这可能是您不想要的。
但是,assoc .php
(至少在我的情况下),返回的文件类型与我使用的编辑器相对应(并且检查此文件类型ftype
给出了同一编辑器的路径)。
要解决此问题,请运行类似以下命令(以管理员身份):
ASSOC .php=PHPScript && FTYPE PHPScript="C:\Program Files (x86)\Xampp\php\php.exe" %1 %*
此后,在浏览器中访问我的测试 PHP 文件,执行第二个测试脚本(不使用 php 前缀)并显示结果。
出于兴趣的考虑,我的测试脚本是:test2.php(在浏览器中运行):
<?php
echo exec('test1.php');
?>
test1.php(在同一文件夹中):
<?php
echo date('r');
?>
(在 Windows 7 上使用 XAMPP 1.7.7/PHP 5.3.8 测试)