正确编码PHP以扫描并从视频目录创建JSON

时间:2016-06-09 17:50:13

标签: php json

您好,我对PHP一无所知,我找到了一个代码,可以通过扫描目录中的文件并创建正确的格式来创建json播放列表,我想知道是否有人可以正确插入目录/视频代码。 videos是包含mp4文件的文件夹,位于根目录

我在此处找到的原始代码http://zurb.com/forrst/posts/Generate_a_JSON_list_based_on_files_in_a_directo-GDc

我想要的只是以下代码来扫描视频目录。

谢谢!

  #!/usr/bin/php
<?php

/*
 * @param Array $types
 * @abstract Array of allowed file types
 */
$types = Array ('jpeg', 'jpg', 'txt', 'pdf', 'js', 'mp4', 'mp3', 'ogg');

if (!isset($argv[1]))
    exit("Must specify a directory to scan\n");

if (!is_dir($argv[1]))
    exit($argv[1]."' is not a directory\n");

/*
 * @name getList
 * @param Array $dir
 * @param Array $types
 * @abstract Recursively iterates over specified directory
 *           populating array based on array of file extensions
 * @return Array $files
 */
function getList($dir, $types)
{
    $it = new RecursiveDirectoryIterator($dir);
    foreach(new RecursiveIteratorIterator($it) as $file)
    {
        if (in_array(strtolower(array_pop(explode('.', $file))), $types))
            $files[] = $file->__toString();
    }
    return $files;
}

/*
 * @name getDetails
 * @param Array $dir
 * @param Array $types
 * @abstract Recursively iterates over specified directory
 *           populating array with details of each file
 * @return Array $files
 */
function getDetails($types, $array)
{
    foreach($types as $type)
    {
        foreach($array as $file)
        {
            if (strcasecmp($type, array_pop(explode('.', $file))) == 0) {
                $files[$type][basename($file)];
                $files[$type][basename($file)]['source'] = $file;
                $files[$type][basename($file)]['size'] = filesize($file);
            }
        }
    }
    return array('files'=>$files);
}

if (!function_exists('json_encode')) {

    /*
     * @name json_encode
     * @param Mixed $val
     * @abstract Alternate emulated json_encode function
     * @return Object $res
     */
    function json_encode($val)
    {
        if (is_string($val)) return '"'.addslashes($val).'"';
        if (is_numeric($val)) return $val;
        if ($val === null) return 'null';
        if ($val === true) return 'true';
        if ($val === false) return 'false';

        $assoc = false;
        $i = 0;
        foreach ($val as $k=>$v){
            if ($k !== $i++){
                $assoc = true;
                break;
            }
        }
        $res = array();
        foreach ($val as $k=>$v){
            $v = json_encode($v);
            if ($assoc){
                $k = '"'.addslashes($k).'"';
                $v = $k.':'.$v;
            }
            $res[] = $v;
        }
        $res = implode(',', $res);
        return ($assoc)? '{'.$res.'}' : '['.$res.']';
    }
}

/* Run application */
exit(json_encode(getDetails($types, getList($argv[1], $types))));

1 个答案:

答案 0 :(得分:2)

编写此脚本是为了从命令行执行,因此从控制台,您将从包含此脚本的目录中执行此语句

php example.php /videos

您还需要将文件扩展名更改为您正在查找的视频格式。

$types = Array ('jpeg', 'jpg', 'txt', 'pdf', 'js', 'mp4', 'mp3', 'ogg');

这可能会成为

$types = Array ('mkv','avi','mp4','mov');

$argv[1]表示传递给脚本的参数,在本例中用作目录路径。因此,如果您想从Web服务器调用此脚本,则在脚本中设置该值为空,以便您仍然可以灵活地从命令行执行它。

所以改变这一行

if (!isset($argv[1]))
    exit("Must specify a directory to scan\n");

到此:

if (!isset($argv[1]))
    $argv[1] = '/videos';