PHP 找不到我的 shell 脚本来用 shell_exec() 执行它
PHP cannot find my shell script to execute it with shell_exec()
原来我的 FTP 客户破坏了我的 shell 脚本,所以感谢所有贡献者。 :)
=================================
我正在尝试使用 PHP 来执行一个 shell 脚本,该脚本存储在与我使用 exec()
的 PHP 脚本相同的目录中,但是我得到一个错误:
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>
检查此 link 使用 php
执行 shell 命令
<?php
$output = shell_exec('ls -lart');
echo "<pre>$output</pre>";
?>
来源和更多检查这个
试试像这样使用绝对路径
$tmpfile = exec("sh: 1: " . $_SERVER["DOCUMENT_ROOT"] . "/hlsvod.sh ".$pid." 2>&1");
原来我的 FTP 客户弄乱了行尾并在我的 shell 脚本中搞砸了所有排序。
注意你的行尾!
原来我的 FTP 客户破坏了我的 shell 脚本,所以感谢所有贡献者。 :)
=================================
我正在尝试使用 PHP 来执行一个 shell 脚本,该脚本存储在与我使用 exec()
的 PHP 脚本相同的目录中,但是我得到一个错误:
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>
检查此 link 使用 php
执行 shell 命令<?php
$output = shell_exec('ls -lart');
echo "<pre>$output</pre>";
?>
试试像这样使用绝对路径
$tmpfile = exec("sh: 1: " . $_SERVER["DOCUMENT_ROOT"] . "/hlsvod.sh ".$pid." 2>&1");
原来我的 FTP 客户弄乱了行尾并在我的 shell 脚本中搞砸了所有排序。
注意你的行尾!