Короткая страница PHP для выполнения команды и передачи идентификатора? - PullRequest
0 голосов
/ 27 января 2010

У меня есть скрипт, который, учитывая идентификатор, запускает некоторые сложные процессы и помещает RTF-файл в stdout. Например, вы могли бы назвать его с чем-то вроде foo.exe 27, чтобы указать его на ID 27.

Теперь я хотел бы написать небольшую страницу PHP, которая:

  • принимает GET id параметр
  • проверяет, что параметр является целым числом
  • вызывает shell_exec(...) в сценарии (предположим, что он $PATH)
  • отвечает выводом скрипта, выскакивая обычную браузерную подсказку загрузки, как если бы они нажали на файл по ссылке

Можно ли это сделать легко?

Ответы [ 2 ]

0 голосов
/ 27 января 2010

Это должно быть довольно просто. Все, что вам нужно, это убедиться, что вы не вставляете в скрипт странные данные, чтобы избежать каких-либо разрывов, и перенаправить STDERR в STDOUT, чтобы избежать ошибок и невозможности их увидеть.

<?php

// configuration
$scriptName = 'foo.exe';

// sets the header to send raw data to the browser
header('Content-Type: text/plain');    

// disables the timeout for your script
set_time_limit(0);

// if the input is not an integer
if (! is_integer($_GET['id']))
{
        // throw to forbidden page
        header("HTTP/1.0 403 Forbidden");
        die();
}

// parameter to use as parameter of 
// the command to call
$parameterId = (int) $_GET['id'];

// preparing the command and redirecting STDERR to STDOUT (the browser)
$command = "$scriptName $parameterId 2>&1";

// executing command and outputing it
print(shell_exec($command));

Надеюсь, это поможет!

0 голосов
/ 27 января 2010

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

Также убедитесь, что вы дезинфицируете ввод, введенный в exec ().

Но да, все это можно сделать.

...