PHP动态更改文件名


PHP dynamically change filename

我今天早些时候得到了一些帮助,但我没有从原始脚本中获得所有内容。基本上,我有一个.txt文件中的图像文件名列表。它们都以幻灯片的形式加载,并随着页面上的分页而改变。

我想做的是,如果我有一个文件的扩展名为。mov,例如,php脚本将加载一个电影播放器。

这是原始的幻灯片脚本

<div id='jessslide'>
  <?php
  echo"
<div id='slider-wrapper'>
<div id='slider' class='nivoSlider'>";
  $photos = file("work.txt");
  foreach ($photos as $image) {
    $item = explode("|", $image);
    if ($item[0] == $fields[0]) {
      $photo = trim($item[1]);
      echo"<img src='images/work/$photo' alt='' />'n";
    }
  }
  echo"
</div></div>"
  ?>
</div>

这是我试图让这个工作的糟糕尝试…

<div id='jessslide'>
  <?php
  $photos = file("work.txt");
  $img = array('jpg', 'png', 'gif');
  $vid = array('swf', 'mp4', 'mov', 'mpg', 'flv');
  foreach ($photos as $image) {
  $item = explode("|", $image);
  if ($item[0] == $fields[0]) {
  $photo = trim($item[1]);
  $ext = explode(".", $image);
  if (in_array($ext[1], $img)) 
  {
  echo "<div id='slider-wrapper'><div id='slider' class='nivoSlider'><img src='images/work/$photo' alt='' /> </div></div>";  
   } 
   elseif (in_array($ext[1], $vid)) 
   {
   echo "<iframe src='$photo' width='800' height='450' frameborder='0' webkitAllowFullScreen allowFullScreen></iframe>";
   }
   }
   }
   ?>
   </div>

我真的很感激,如果有人能帮助我,最终把这个剧本的生活!:)

我看到的最有可能的问题是$ext的赋值应该绑定到$item$photo而不是$image。如果这能解决问题,那就太好了。否则,请阅读下面的内容,以获得更完整的分析和一些调试步骤建议,直到您缩小问题的原因。


假设所有数据都是准确的,那么您编写的脚本看起来应该可以工作。我在这里重新格式化了它,以便进行一些分析:

<div id='jessslide'>
<?php
$photos=file("work.txt");
$img = array('jpg', 'png', 'gif');
$vid = array('swf', 'mp4', 'mov', 'mpg', 'flv');
foreach($photos as $image){
  $item=explode("|",$image);
  if($item[0]==$fields[0]){
    $photo=trim($item[1]);
    $ext = explode(".", $image);
    if(in_array($ext[1], $img))
    { echo "<div id='slider-wrapper'><div id='slider' class='nivoSlider'><img src='images/work/$photo' alt='' /> </div></div>"; }
    elseif(in_array($ext[1], $vid))
    { echo "<iframe src='$photo' width='800' height='450' frameborder='0'     webkitAllowFullScreen allowFullScreen></iframe>"; }
  }
}
?>
</div>

在这个脚本中,有三个主要的地方会出现问题,而这些问题不会导致任何输出。

第一个在foreach()循环中。如果$photos数组中没有任何内容,您将跳过整个代码块。您可以通过在foreach()之前添加print_r($photos);,然后在foreach()主体的第一行添加echo $image." ";来测试这种情况,以验证所有文件都如您所期望的那样列出。如果这看起来是正确的,删除调试代码并继续。

第二个潜在的问题是$item[0]不等于$fields[0]。为了测试这一点,将echo 0;添加为if($item[0]==$fields[0])中的第一行。如果在脚本运行时看到预期的零,则可以删除此调试代码并继续。

第三个潜在的问题是拉/检查扩展。一个可能的问题是,如果分配给$ext应该与$item$photo而不是$image联系在一起,但肯定还有其他可能的问题。为了测试这一点,在if(in_array($ext[1], $img))之前添加echo $image." ".$ext[1]."'n"; print_r($img); print_r($vid);。然后用echo 3;的主体添加一个临时的else子句。验证

一旦您弄清楚代码中的哪个条件导致了问题,您将在解决问题的道路上走得很好。我的猜测是,您将通过测试,要么在我们假设正确的早期部分中发现一个明显的错误,要么最终打印出大量的3。在后一种情况下,一个可能的问题可能来自大小写差异,这可以通过将$item赋值更改为$item=strtolower(explode("|", $image);

来解决。