0

我是使用 Linux 的新手,我正在尝试编写一个可以运行 .exe linux 兼容文件的 PHP 代码,我制作了一个简短的 shell 脚本

你好 bash 脚本:

#!/bin/bash

./program.exe file.mp4   // file.mp4 is an an input for .exe 
echo "Hello World!"

外壳.php:

<?php

$output = exec ("./hello ");
echo "<pre>$output</pre>";
?>

现在,当我shell.php 使用网络浏览器运行时,它显示Hello World!但 .exe 没有运行,但是当我使用终端命令运行 php 时php shell.php,它工作正常。

我认为我遇到了权限问题,但我是 Linux 新手,我不知道如何解决这个问题。

更新:

我忽略了shell脚本,我使用了

<?php

$output = shell_exec ("cd /var/www/ && ./program.exe file.mp4 2>& " );

?>

我还授予对 program.exe 的访问权限

chmod 777 program.exe 

我在浏览器中收到的错误:无法打开 debug.bin!

4

3 回答 3

1

使用 hello 可执行文件 exec("sh path/to/the/file") 的绝对路径

于 2013-09-10T08:41:57.470 回答
1

我正在使用类似于在远程 ubuntu 网络服务器上调用使用单声道编译的应用程序并将其输出返回给调用脚本的东西。

要使所有这些正常工作,wine 需要已经安装。在 Ubuntu 系统上尝试:

sudo apt-get -y install wine

然后,您需要知道 Web 服务器进程的所有者。如果您正在运行 apache Web 服务器,请尝试以下操作:

cat /etc/apache2/envvars | grep "RUN"

输出将如下所示:

export APACHE_RUN_USER=www-data
export APACHE_RUN_GROUP=www-data
export APACHE_RUN_DIR=/var/run/apache2$SUFFIX

现在您有了进程所有者的名称,在这种情况下,www-data您应该确保文件归用户及其组所有:

sudo chown www-data /var/www/program.exe
sudo chgrp www-data /var/www/program.exe

最后,我们可以通过将其作为参数传递给“wine”并使用其完整文件路径,从 PHP 脚本内部调用应用程序。

<?php
    $output = shell_exec("wine /var/www/program.exe file.mp4" );
?>

发送到命令行的上述 shell 命令的任何输出都将保存在 PHP 脚本变量$output中。

看起来您正在尝试使用 进行一些输出重定向,program.exe file.mp4 2>&因此为了清晰起见,我已将其从示例中删除。

于 2015-11-11T14:27:27.067 回答
0
  1. 尝试使用绝对路径,例如exec("sh /path/to/file")

  2. 一般情况下,php 运行为wwwor apache,因此请确保所有用户都具有执行访问权限。

于 2013-09-10T08:48:50.000 回答