【问题标题】:How to make it run the `exec()` command in PHP to edit some file in Mac OS X?如何让它在 PHP 中运行 `exec()` 命令来编辑 Mac OS X 中的某些文件?
【发布时间】:2011-02-18 20:00:03
【问题描述】:

当我有这个 PHP 脚本时。

<?php
    exec('/usr/local/bin/mate hello.txt');
?>

例如,它不适用于带有http://abc/hello.php 的网络浏览器。

mate的命令是'TextMate app',只是用来编辑hello.txt。

这是一些 php 权限问题吗? 我只需要在我的本地 Web 服务器上运行一些命令(我是唯一的用户),这样我就可以打开运行这个看似危险的 exec() 函数的权限。

  • 问:如何让它运行 PHP exec() 函数?

我使用 Mac OS X 10.6.6/Apache/PHP5。

添加

我想在我的 Mac 上使用 PHP 启动某些东西是不可能的,但为了我打开 TextMate 编辑器来编辑某些东西的目的,使用 txmt 协议可以正常工作。

已解决

在 web 浏览器(尤其是 Safari)中启动应用程序不能使用 php,而是使用协议处理程序。

启动 TextEditor 进行编辑。

TextEditor 提供自己的协议处理程序txmt://open/?url=file://THE_FILE_TO_EDIT"

或者,您可以在单击时使用一个按钮来编辑文件。

<form action="txmt://open/?url=file://FILE_TO_EDIT" method="post">
  <button type="submit">Edit</button>
</form>

启动其他应用程序

您需要提出自己的协议处理程序。有一个例子的所有必要信息。

例如,用于启动 PathFinder

在 Info.plist 中创建 URL 类型/方案。

您可能想要弹出的主窗口。您可以设置Application is agent

制作pf: 协议处理程序。

它只是分析pf:INPUT_GINVEN 的输入,得到INPUT_GIVEN 部分作为参数给PathFInder。

@implementation URLHandlerCommand!
- (id)performDefaultImplementation {
    NSString *urlString = [self directParameter];

    NSLog(@"url :=: %@", urlString);

    NSArray *components = [urlString componentsSeparatedByString: @":"];
    NSString* string2 = (NSString*) [components objectAtIndex:1];

    NSLog(@"url :=: %@", string2);

    [[NSWorkspace sharedWorkspace] openFile:string2 withApplication:@"Path Finder"];
    [[NSApplication sharedApplication] terminate:nil];

    return nil;
}

@结束

使用pf:OPEN_DIRECTORY 协议。
<form action="pf:DIRECORY_TO_OPEN" method="post">
    <button type="submit">Open</button>
</form>

【问题讨论】:

  • my_editor 是一个互动程序吗?这意味着如果您在 shell 中启动它,它实际上会与您交互吗?
  • 你是说你想用一个php脚本在你的机器上打开一个编辑器?
  • @Dalton:是的,我是。如果可能的话,我只是想用网络浏览器来控制。
  • @ircmaxell :不,my_editor 只是 TextMate 程序。
  • 为什么这个问题被否决了?

标签: php macos protocols exec


【解决方案1】:

如果脚本在远程 Web 服务器上运行,那么 exec() 将在远程服务器上运行,而不是本地计算机。我的猜测是您希望该命令在访问该网站的本地计算机上运行,​​但出于非常好的(安全)原因,这是不可能的。

您可能想要使用txmt:// 协议,如Textmate Manual 中所述:

<a href="txmt://open/?url=file://~/.bash_profile&line=11&column=2">Open in Textmate</a>

【讨论】:

  • 感谢您让我使用 txmt:// 协议,我想我可以使用此协议来获得与我预期相同的结果。
【解决方案2】:

你做得对。尝试运行其他类似ls 的东西,看看是否可行。当您运行该命令时,它是否会显示一些输出然后将您返回到提示符?如果没有,那么您将无法通过 PHP 中的 exec 运行它来获得任何东西。您将无法在浏览器中运行命令行编辑器。

【讨论】:

  • 运行 'exec('ls')' 我什么也没得到。
  • @prosseek 可能还有其他问题,但这很可能是因为您尝试运行的东西不仅仅是运行并输出一些东西,然后返回提示。试试这段代码,看看你是否得到了什么,如果你这样做了,你的 exec 命令工作正常。 echo exec('pwd');
  • +1 "您将无法在浏览器中运行命令行编辑器。"
猜你喜欢
  • 2015-03-21
  • 2015-11-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-08
  • 2015-07-07
  • 1970-01-01
相关资源
最近更新 更多