无法正确读取txt文件到PHP数组

时间:2011-08-04 06:17:35

标签: php arrays text-files

我有工作脚本在页面上显示YouTube视频,但我需要它从单独的(txt)文件中读取数组中的地址。我尝试了几种解决方案,但尚未找到一种解决方案。 来自聪明人的任何帮助!

我的工作代码使用如下数组:

$video = array('JObJ7vuppGE', 'BsmE6leTbkc', 'zWtj4TEVLvU');// array of youtube videos

我计划使用的是:

$tube = $_SERVER['DOCUMENT_ROOT'] .'/youtube.txt';// IDs of youtube videos inside

$lines = file($tube);

foreach($lines as $line_num => $line)

$video = array($line);// array of youtube videos

$v = preg_replace("/[^A-Za-z0-9\-\_]/", "", $_GET["v"]); // make sure "v" parameter is sanitized

if(!empty($v) && in_array($v, $video))  //check if parameter "v" is empty and is yours video
{ 
    echo '<object width="853" height="505"><param name="movie" value="http://www.youtube.com/v/' . $v . '&hl=en_US&fs=1&hd=1&color1=0xe1600f&color2=0xfebd01"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param>
    <embed src="http://www.youtube.com/v/' . $v . '&hl=en_US&fs=1&hd=1&color1=0xe1600f&color2=0xfebd01" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="853" height="505"></embed>
    </object>';
}
else
{
    foreach($video as $v)
    {
        echo '<div class="tube">
            <a href="/sites/tube.php?v=' . $v . '" class="thickbox">
                <img style="border: 2px solid #000; margin: 5px;" alt="" src="http://i1.ytimg.com/vi/' . $v . '/default.jpg"/>
            </a>';

            $xmlData = simplexml_load_string(utf8_encode(file_get_contents('http://gdata.youtube.com/feeds/api/videos/' . $v . '?fields=title,yt:recorded')));
            $title = (string)$xmlData->title;
            $entry = $xmlData;

            $namespaces = $entry->getNameSpaces(true);
            $yr = $entry->children((string)$namespaces['yt']);

            // get <yt:recorded> node for date and replace yyyy-mm-dd to dd.mm.yyyy
            $year = substr($yr->recorded, 0, 4); 
            $month = substr($yr->recorded, 5, 2);
            $day = substr($yr->recorded, 8, 2);
            $recorddate = $day . "." . $month . "." . $year;

            echo '<p>' . $recorddate . '<br>' . $title . '<br>
            </p>
        </div>'; 
    }
}

不幸的是我只能读取第一行的txt文件。至少我只能在页面中显示第一个视频。我的做法显然是错误的。 不要告诉我,我现在的代码很乱。只要它仍然按计划运行,请随意修改和改进它。

3 个答案:

答案 0 :(得分:0)

我刚刚将您的代码复制到我本地安装的XAMPP。

在查询字符串中没有'v'参数时,会显示一个视频列表,每个视频都显示缩略图和标题,并在链接中重定向回同一页面,但包含'v'参数。

点击加载显示所选视频的YouTube播放器的页面的缩略图。

我认为这里没有问题......

答案 1 :(得分:0)

我从你的问题中理解你想从多个文件中读取视频ID并将其合并到一个php数组中?我是对的吗?

另外,我建议您使用Zend_gdata api来实现youtube功能,只需使用许多其他选项即可使用

答案 2 :(得分:0)

我认为主要的想法/问题是将id存储在txt文件中并读取它们而不是将它们存储在数组中吗?

<?php

/**
 * @author - Sephedo
 * @for - dogcat @ Stackoverflow
 * @question - http://stackoverflow.com/questions/6936958/cant-read-txt-file-correctly-to-php-array
 */

$filename = "youtube.txt";

// Open the file
if( $handle = @fopen( $filename, "r") )
{
    // Cycle each line until end
    while(! feof( $handle ) )
    {
        $line = fgets($handle); // Read the line

        $youtube[] = $line;
    }
}

if(! isset( $youtube ) ) $youtube = array();

foreach( $youtube as $videoId )
{
    echo $videoId; // Etc etc etc.....
}

?>