Как заставить его выполнить команду `exec ()` в PHP для редактирования какого-либо файла в Mac OS X? - PullRequest
0 голосов
/ 18 февраля 2011

Когда у меня есть этот скрипт PHP.

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

Он не работает, например, в веб-браузере с http://abc/hello.php,.

Командой mate является «TextMate app», и она предназначена только для редактирования привет.txt.

Это какая-то проблема с разрешением php?Мне просто нужно выполнить некоторые команды на моем локальном веб-сервере (я единственный пользователь), чтобы я мог открыть разрешение на запуск этой, казалось бы, опасной exec() функции.

  • В: Как я могу заставить его запустить функцию PHP exec()?

Я использую Mac OS X 10.6.6 / Apache / PHP5.

ДОБАВЛЕНО

Полагаю, невозможно запустить что-то с PHP на моем Mac, но для моих целей открыть редактор TextMate для редактирования чего-либо, используя протокол txmt, прекрасно работает.

решено

С точки зрения запуска приложения в веб-браузере (особенно 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

Создание типов / схем URL в Info.plist.

Вы можете захотеть, чтобы всплыло главное окно.Вы можете установить Application is agent.

enter image description here

Сделать обработчик протокола 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;
}

@ end

Использовать протокол pf:OPEN_DIRECTORY.
<form action="pf:DIRECORY_TO_OPEN" method="post">
    <button type="submit">Open</button>
</form>

Ответы [ 2 ]

2 голосов
/ 18 февраля 2011

Если скрипт выполняется на удаленном веб-сервере, то exec() будет запускаться на удаленном сервере, не на локальной машине.Я предполагаю, что вы хотите, чтобы команда запускалась на локальном компьютере, который посещает веб-сайт, но это невозможно по очень хорошим причинам (из соображений безопасности).

То, что вы, вероятно, хотите использовать, - это протокол txmt://описано в Руководстве по Textmate :

<a href="txmt://open/?url=file://~/.bash_profile&line=11&column=2">Open in Textmate</a>
2 голосов
/ 18 февраля 2011

Вы делаете это правильно.Попробуйте запустить что-то еще, например ls, и посмотрите, работает ли это.Когда вы запускаете эту команду, она показывает какой-то вывод и возвращает вас к приглашению?Если этого не произойдет, то вы ничего не получите, запустив его через exec в PHP.Вы не сможете запустить редактор командной строки в браузере.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...