Оказывается, мой FTP-клиент испортил мой сценарий оболочки, так что спасибо всем, кто внес свой вклад. 🙂
===============================
Я пытаюсь использовать PHP для выполнения сценария оболочки, хранящегося в той же директории, что и мой сценарий PHP, используя exec()
, но я получаю ошибку:
sh: 1: ./hlsvod.sh: not found
Я попытался использовать полный путь к сценарию, я изменил его 777, я пытался использовать shell_exec()
но я все еще получаю ту же ошибку (я перенаправил stderr
в stdout
чтобы получить это). Сценарий определенно существует. Не могли бы вы помочь?
Код:
<?php
/* Probably not the most elegant solution but it works. */
$pid = $_GET['pid'];
if(empty($_GET['pid'])){
die("No PID -- do ?pid=XXXXXXXX");
}
$tmpfile = exec("./hlsvod.sh ".$pid." 2>&1");
echo nl2br(shell_exec("pwd;whoami;"));
var_dump($tmpfile);
$a = fopen($tmpfile."m3u8", "r");
$stream = fread($a);
fclose($a);
$b = fopen($tmpfile."subs");
$subs = fread($b);
fclose($b);
var_dump($stream);
var_dump($subs);
?><!doctype html>
<html>
<head>
<meta name="viewport" content="width=device-width,user-scalable=no">
<title>New 3DS iPlayer - <?=$pid;?></title>
</head>
<body>
<h1>Live HLS Stream for <?=$pid;?></h1>
<p>HLS stream URL: <a href="<?=$stream;?>"><?=$stream;?></a></p>
<p>VTT subtitles URL: <a href="<?=$subs;?>"><?=$subs;?></a></p>
<video id="video" controls preload="metadata">
<source src="<?php echo $stream; ?>">
<track label="English" kind="subtitles" srclang="en" src="<?=$subs;?>" default>
</video>
</body>
</html>
Попробуйте использовать абсолютный путь, как это
$tmpfile = exec("sh: 1: " . $_SERVER["DOCUMENT_ROOT"] . "/hlsvod.sh ".$pid." 2>&1");
Оказалось, мой FTP-клиент задрал конец строки и перепутал все в моем сценарии оболочки.
Следите за окончаниями строк!
проверьте эту ссылку для выполнения команд оболочки с помощью php
<?php
$output = shell_exec('ls -lart');
echo "<pre>$output</pre>";
?>