PHP - 从文件夹链接

时间:2012-01-19 15:44:20

标签: php list hyperlink directory

我目前正在客户网站的前端工作。 他是一名摄影师,并不想打扰CMS系统(sheesh)。

我只是按照他向我解释的方式解释它:

他想在他的FTP上创建充满图像的文件夹。 这些文件夹代表页面或类别。 然后,这些文件夹中的图像应显示在从该文件夹创建的页面上。 如果该文件夹名为" fashion",他希望该域名为:www.client.com/fashion。

我在互联网上寻找解决方案,我真的希望你能帮助我摆脱困境。

基本上,我需要一个精简的目录列表系统,它扫描文件夹并在php文件中创建带有文件夹名称的链接,在里面显示图像。此外,如果您在文件夹中删除txt文件,它应该在其中显示文本。

这个系统类似于Stacey CMS,但遗憾的是他不想要任何CMS。

如果您需要更多信息,请随时留言。

谢谢。

3 个答案:

答案 0 :(得分:1)

首先,您需要重写URL,以便将其传递给PHP脚本,以便您可以使用它。假设Apache,你可以放置像这样的.htaccess文件:

参考:http://httpd.apache.org/docs/current/mod/mod_rewrite.html

RewriteEngine On

RewriteBase /

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^(.*)$ imagelist.php?dir=$1 [L]

然后,在imagelist.php中,执行以下操作:

<?php

  $baseDir = 'images/';

  $workingDir = $baseDir.$_GET['dir'];

  if (!is_dir($workingDir) || (!$dp = opendir($workingDir))) {
    exit('Unknown category: '.$_GET['dir']);
  }

  echo '<html><head><title>'.$_GET['dir'].'</title></head></body>';

  while (($file = readdir($dp)) !== FALSE) {
    if (substr(strtolower($file),-4) == '.txt') {
      // Handle text files
      echo '<pre>'.file_get_contents($workingDir.'/'.$file).'<pre>';
    } else {
      // Treat everything else as an image
      echo '<img src="'.$workingDir.'/'.$file.'" alt="'.$file.'" title="'.$file.'">';
    }
  }

  echo '</body></html>';

显然,这并没有对布局进行任何好的格式化,但希望它会给你一个正确的方向。

答案 1 :(得分:1)

你需要的是这个,

  1. 从url读取类别(为此使用mod_rewrite)

    RewriteEngine On
    RewriteBase /
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    
    # Rewrite all other URLs to index.php/URL
    RewriteRule ^(.*)$ index.php/$1 [PT,L]
    
  2. 通过php扫描您在步骤1中阅读的目录。

  3. 在漂亮的html模板中显示内容
  4. 对于单张照片(如果要以全屏显示),请使用其他模板。
  5. 它需要2个PHP脚本。还有2个html模板。此外,您可能需要一个缩略图创建解决方案。

答案 2 :(得分:1)

实际上这很简单。使用DirectoryIterator。我会发布一些代码来推动你朝着正确的方向发展,但我没有给你解决方案,你必须自己做; - )

我使用此代码段来获取横幅目录中的文件夹列表:

    $tmpDir = dirname(__FILE__).DIRECTORY_SEPARATOR.'banners'.DIRECTORY_SEPARATOR.'emrc'.DIRECTORY_SEPARATOR;
    $dirProc=new DirectoryIterator($tmpDir);
    $banerSizes = array();
    foreach($dirProc as $dirContent){
        if ($dirContent->isFile() || substr($dirContent->getFilename(), 0, 1) === '.') continue;
        if ($dirContent->isDir()) {
            $banerSizes[] = $dirContent->getFilename();
        }
    }
    natcasesort($banerSizes);

我用它来显示它们:(注意:我没有链接图像,但我提供了一个代码示例来复制和粘贴链接。这可以很容易地根据您的需要进行修改)

    <table class="regular" width="100%" cellpadding="0" cellspacing="0">
    <?php 
        /**
         * Display bannes
         */
        foreach($banerSizes as $bannerSize){
            $tmpDir = dirname(__FILE__).DIRECTORY_SEPARATOR.'banners'.DIRECTORY_SEPARATOR.'emrc'.DIRECTORY_SEPARATOR.$bannerSize.DIRECTORY_SEPARATOR;
            $dirProc=new DirectoryIterator($tmpDir);
            ?>
        <tr>
            <td>
                <a name="<?php echo $bannerSize; ?>"><?php echo $bannerSize; ?></a>
                <hr />
            </td>
        </tr>

            <?php 
            foreach($dirProc as $dirContent){
                if (!$dirContent->isFile() || substr($dirContent->getFilename(), 0, 1) === '.') continue;
        ?>
        <tr>
            <td align="center">
                <img src="/banners/emrc/<?php echo $bannerSize; ?>/<?php echo $dirContent->getFilename(); ?>" />
                <br />
                <textarea cols="42" rows="4" readonly="readyonly"><a href="<?php echo $affiliateLink; ?>"><img src="<?php echo $siteLink; ?>/banners/emrc/<?php echo $bannerSize; ?>/<?php echo $dirContent->getFilename(); ?>" /></a></textarea>
                <br />
                <hr style="width:384px" />                      
            </td>
        </tr>
        <?php 
            }
        }
        ?>              
    </table>

不要使用表格。我之所以这样做,是因为我工作的模板需要它。 我希望这对你有所帮助,请告诉我。