我正在尝试使用以下代码在网页上显示所有视频,我已经能够迭代文件,打印文件名和嵌入视频。然而,视频是灰色的,不起作用,我怀疑我在代码中使用$ filename做错了。
<?php
$dir = new DirectoryIterator(dirname(__FILE__));
foreach ($dir as $filename) {
if (!$filename->isDot()) {
if ($filename != "index.php" and $filename != "error_log") {
echo $filename, "<br>";
echo '<video width="400" controls="controls" preload="metadata">
<source src=$filename type="video/mp4"></video>';
echo "<br><br>";
}
}
}
?>
这就是它出现的方式:
答案 0 :(得分:2)
你回显$filename
就像一个字符串,而不是一个PHP变量。
请记住,如果单引号'
的回声全部在内部,它将像字符串一样回显,而双引号"
的回声将回显读取其值的PHP变量。关于字符串的信息在PHP中有解释,例如here。
您可以更改您的代码片段,将HTML视频回显到:
echo '<video width="400" controls="controls" preload="metadata"><source src="' . $filename . '" type="video/mp4"></video>';
请注意,HTML video
代码src
属性也缺少双引号,我在上面的代码中添加了它们。
答案 1 :(得分:1)
更改
<source src=$filename type="video/mp4"></video>';
到
<source src="'.$filename.'" type="video/mp4"></video>';
答案 2 :(得分:1)
你的php变量在single quotes内,并且(来自doc)变量和特殊字符的转义序列在单引号字符串中出现时不会被展开。
作为替代方法,您可以将字符串保留在单引号之间,并使用sprintf来返回格式化字符串,并使用例如%s
来指定参数应作为字符串类型处理。
echo sprintf('<video width="400" controls="controls" preload="metadata">
<source src="%s" type="video/mp4"></video>',
$filename);