如何只获取php中所有文件的文件夹目录中的视频文件?
How to get only video files from folder directory of all files in php?
我在 "uploads/video/" 目录中有一些视频、图像和文本文件。
在这里,我使用 scandir
获取所有文件,但我只想要该文件夹中的视频。
示例代码:
$video_dir = 'uploads/video/';
$video_array = scandir($video_dir);
unset($video_array[0]);
unset($video_array[1]);
echo "<pre>";
print_r($video_array);
echo "</pre>";
得到结果:
Array ( [2] => ADD.mp4 [3] => COO_Notes.txt [4] => Carefree.mp3 [5] => Circus Tent.mp3 [6] => Phen.mp4 [7] => REM.mp4 [8] => images (9).jpg [9] => images.jpg [10] => test.php )
我只需要视频文件。删除文本、mp3、jpg 等文件:
Array ( [2] => ADD.mp4 [6] => Phen.mp4 [7] => REM.mp4)
感谢您的更新。
您可以使用 glob()
:
<?php
foreach (glob("*.mp4") as $filename) {
echo "$filename - Size: " . filesize($filename) . "\n";
}
# or:
$video_array = glob("*.mp4");
?>
为了获得多种格式,只需将扩展名放在花括号中并添加参数 GLOB_BRACE
:
$video_array = glob('uploads/video/{*.mp4,*.flv,*.mov}', GLOB_BRACE);
在 PHP.net 上查看。
我相信函数 pathinfo
应该可以帮到您。
http://php.net/manual/en/function.pathinfo.php
<?php
$videos = array();
$video_ext = array('mp4', 'mpeg');
foreach ($video_array as $path) {
if (in_array(pathinfo($path, PATHINFO_EXTENSION), $video_ext)) {
//less general, but will work if you know videos always end in mp4
//if (pathinfo($path, PATHINFO_EXTENSION) == "mp4") {
$videos[] = $path;
}
}
您可以使用 mime_content_type
检查文件类型:http://php.net/manual/en/function.mime-content-type.php。
假设这将是这样的:
$videos = array();
$dir = 'uploads';
$files = scandir($dir);
foreach($files as $file) {
$filepath = $dir . '/' . $file;
if(is_file($filepath)) {
$contentType = mime_content_type($filepath);
if(stripos($contentType, 'video') !== false) {
$videos[] = $file;
}
}
}
此外,这可能不是很快,并且可能不会检测到所有可能的(奇怪的)视频文件(因为它使用 magic.mime
)。但这可能在没有文件扩展名数组的情况下工作,并且还会查看文件本身而不是文件名。
我在 "uploads/video/" 目录中有一些视频、图像和文本文件。
在这里,我使用 scandir
获取所有文件,但我只想要该文件夹中的视频。
示例代码:
$video_dir = 'uploads/video/';
$video_array = scandir($video_dir);
unset($video_array[0]);
unset($video_array[1]);
echo "<pre>";
print_r($video_array);
echo "</pre>";
得到结果:
Array ( [2] => ADD.mp4 [3] => COO_Notes.txt [4] => Carefree.mp3 [5] => Circus Tent.mp3 [6] => Phen.mp4 [7] => REM.mp4 [8] => images (9).jpg [9] => images.jpg [10] => test.php )
我只需要视频文件。删除文本、mp3、jpg 等文件:
Array ( [2] => ADD.mp4 [6] => Phen.mp4 [7] => REM.mp4)
感谢您的更新。
您可以使用 glob()
:
<?php
foreach (glob("*.mp4") as $filename) {
echo "$filename - Size: " . filesize($filename) . "\n";
}
# or:
$video_array = glob("*.mp4");
?>
为了获得多种格式,只需将扩展名放在花括号中并添加参数 GLOB_BRACE
:
$video_array = glob('uploads/video/{*.mp4,*.flv,*.mov}', GLOB_BRACE);
在 PHP.net 上查看。
我相信函数 pathinfo
应该可以帮到您。
http://php.net/manual/en/function.pathinfo.php
<?php
$videos = array();
$video_ext = array('mp4', 'mpeg');
foreach ($video_array as $path) {
if (in_array(pathinfo($path, PATHINFO_EXTENSION), $video_ext)) {
//less general, but will work if you know videos always end in mp4
//if (pathinfo($path, PATHINFO_EXTENSION) == "mp4") {
$videos[] = $path;
}
}
您可以使用 mime_content_type
检查文件类型:http://php.net/manual/en/function.mime-content-type.php。
假设这将是这样的:
$videos = array();
$dir = 'uploads';
$files = scandir($dir);
foreach($files as $file) {
$filepath = $dir . '/' . $file;
if(is_file($filepath)) {
$contentType = mime_content_type($filepath);
if(stripos($contentType, 'video') !== false) {
$videos[] = $file;
}
}
}
此外,这可能不是很快,并且可能不会检测到所有可能的(奇怪的)视频文件(因为它使用 magic.mime
)。但这可能在没有文件扩展名数组的情况下工作,并且还会查看文件本身而不是文件名。