在php中执行程序

时间:2012-06-01 02:54:24

标签: php apache mobile lamp

有没有办法在服务器上执行程序,例如:Firefox,Gimp等等。

我的概念是能够在我的手机上登录我的本地LAMP服务器,在文本框中键入命令(例如:/ usr / bin / firefox)并按下使用帖子发送命令字符串的按钮另一个在我的服务器上启动程序的PHP脚本的方法。这很好,所以当我在旅途中想要启动“firefox http://www.blahblah.net”并回到我的计算机时打开firefox。是的,我知道安全问题,但它只是一个概念验证。

我已经尝试过exec()和system()命令,但它们似乎无法工作......我做错了什么?

#!/usr/bin/env ruby

require 'rubygems'
require 'sinatra'

disable :protection # not needed on something this simple
set :port, 11111    # think 1APPX

get '/' do
# this handles both apps (via ?app=...) and files (via ?file=...)

if params[:app] then
    # as a side effect, this also happens to actually run the app, which is
    # pretty much what we wanted in the first place
    @fn = params[:app][1..-2];
    `/usr/bin/env #{@fn}`
elsif params[:file] then
    # bugfix, remove quotes...
    @fn = params[:file][1..-2];
    # xdg-open anyone?
    puts "DEBUG /usr/bin/env xdg-open #{@fn}";
    `"/usr/bin/env xdg-open #{@fn}"`
else
    # nothing...
    404
end

end

not_found do
status 404
"Application #{@fn} not found. Usage: /?app=\"[appname]\" or /?file=\"[filename]\""
end

4 个答案:

答案 0 :(得分:3)

请勿使用Web应用程序。安全障碍很多,需要广泛的Linux系统管理知识才能实现这一目标。

我的建议是为您的手机安装一个SSH客户端 - 它们适用于Android和iOS,并通过SSH连接到您的计算机。您还可以为这两个平台获取VNC客户端,以便您可以直接在GUI上操作,而无需欺骗X11在您实际未查看的显示器上启动应用程序。

答案 1 :(得分:2)

首先,您应该使用将要登录的用户运行您的Apache服务器。接下来,您应该执行:

<?php
system("export DISPLAY=:0; /usr/bin/firefox;");

我在这里测试并且工作

答案 2 :(得分:1)

我会考虑编写一个“userland”守护程序,该守护程序在系统托盘中运行,侦听HTTP(或HTTPS)请求并打开相应的程序。

答案 3 :(得分:1)

您需要指定完整路径

exec('/full/path/to/firefox http://google.com');