HTML — Как запустить функцию командной строки в переполнении стека

У меня проблемы с запуском программы из командной строки в php. Всякий раз, когда я запускаю программу в командной строке, создается соответствующий файл, и он работает отлично. Однако, когда я иду и помещаю его в свой php и использую функцию exec (), ничего не происходит.

В конце я хочу, чтобы пользователь мог выбрать параметры, которые он хочет запустить во внешней программе, но сейчас я просто пытаюсь запустить его с жестко закодированными значениями в ….

Вот команда, которую я использую для запуска программы из командной строки и ее параметров.

 [path1] -p blastp -d [parameter1] -i [path2] -e [parameter2] -m 9 -o [path3]

where [path1] is the path to ../blast-2.2.26/bin/blastall,
[path2] is the path to sample.fasta
[path3] is the path for the output file (you may want to create another folder for generating the output)
[parameter1] is the name of database chosen by the user from your page (eg. Human.db, Viruses.db, etc)
[parameter2] is the E-value given by the user from your page(eg. 0.0001, 1, 1000, etc)

Фактический код, который я набрал бы в командной строке, был бы

~/blast/blast-2.2.26/bin/blastall -p blastp -d db -i ~/temp/sample.fasta -m 9 -o output'

Вот мой код до сих пор.

<form method="POST", action="/~cs4380sp15grp4/home/blast.php">

<select id="database" name="database">
<option selected="selected" disabled="disabled">Database</option>
<option value="Archaea">Archaea</option>
<option value="Bacteria">Bacteria</option>
</select>

<select id="evalue" name="evalue">
<option selected="selected" disabled="disabled"> evalue <option>
<option value="0.0001">0.0001</option>
<option value="0.001">0.001</option>
</select>

<select id="hits" name="hits">
<option selected="selected" disabled="disabled"> Hits</option>
<option value="50">50</option>
</select>

<input id="BlastSearch" type="text" name="BlastSearch" value='' />
<input type="submit" name="submit" value="submit" />
<button type="reset" value="Clear">Clear</button>
</form>
<?php
session_start();
require_once '../secure/database.php';
$mysqli = new mysqli($dbhost,$dbuser,$dbpass,$dbname);

if($mysqli->connect_error){
exit('CON Error: ' . $mysqli->connect_errno . ' ' . $mysqli->connect_error);
}

//Insert the values into the database

if(isset($_POST['submit'])){$db = $_POST['database'];
$evalue = $_POST['evalue'];
$sequence = $_POST['BlastSearch'];

$mysqli->query("INSERT INTO `Job` (`uid`, `input`, `status`, `start_time`, `finish_time`) VALUES ('1', '" . $sequence . "', 'running' , NOW(), NULL)");

$mysqli->query("INSERT INTO `BLAST`(`database`, `evalue`, 'job_id') VALUES ('" . $db . "','" . $evalue . "', `1`)") or die(mysqli_error($db));

exec(' /students/groups/cs4380sp15grp4/blast/blast-2.2.26/bin/blastall -p blastp -d db -i /students/groups/cs4380sp15grp4/temp/sample.fasta -m 9 -o /students/groups/cs4380sp15grp4/temp/output');
}//    print "Connected! Host info: " . $mysqli->host_info . "<br>\n";
$mysqli->close();

?>

Так что моя функция exec не работает на моей странице php, потому что та же самая команда работает в терминале.

-2

Решение

~ это домашняя папка текущего активного пользователя. PHP скрипты выполняются пользователем www-dataДомашняя папка /var/www,

Чтобы исправить это, используйте полные пути. Пример:

exec(' /home/username/blast/blast-2.2.26/bin/blastall -p blastp -d db -i /home/username/temp/sample.fasta -m 9 -o output');
1

Другие решения

Используйте полный путь, т.е.

   exec(' /full/path/to/blast/blast-2.2.26/bin/blastall -p blastp -d db -i /full/path/to/temp/sample.fasta -m 9 -o output');
}
0

По вопросам рекламы [email protected]