简体   繁体   中英

HTML embed video using PHP variable doesn't work

I'm trying to display all videos a webpage using the following code, I've gotten as far as being able to iterate over the files, printing the file names and embedding a video. However the videos are greyed out and don't work, I suspect I did something wrong with using $filename in the code.

<?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>";
        }

    }
}
?>

This is how it shows up:

在此处输入图片说明

在此处输入图片说明

Hi

You are echo $filename like a string, not a PHP variable.

Remember, if echo with single quotes ' all inside it will echo like string and echo with double quotes " will echo PHP variables reading their value. Informations about strings in PHP are nicley explained eg here .

You can change your piece of code witch echo HTML video to:

echo '<video width="400" controls="controls" preload="metadata"><source src="' . $filename . '" type="video/mp4"></video>';

Note that there were also missing double quotes for HTML video tag src property and I added them in code above.

Cheers

Change

<source src=$filename type="video/mp4"></video>';

to

<source src="'.$filename.'" type="video/mp4"></video>';

Your php variable is inside single quotes and (from the doc) variables and escape sequences for special characters will not be expanded when they occur in single quoted strings.

As an alternative you could keep your string between single quotes and make use of sprintf which will return a formatted string and use for example %s to specify that the argument should be handled as string type.

echo sprintf('<video width="400" controls="controls" preload="metadata">
<source src="%s" type="video/mp4"></video>',
    $filename);

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM