【问题标题】:My script is not displaying links properly我的脚本没有正确显示链接
【发布时间】:2011-07-26 11:31:39
【问题描述】:

我很难解释整个情况,但我会尽力...

我为我的图像主机制作了一个脚本,它将包含图像的 Zip 包解压缩到某个位置,将文件重命名为随机文件名,并输出多个指向图像的链接。最后一部分工作不正常!我无法输出图像的多个链接 - 它只是输出图像的一个链接(第一个),其余的位于上传的文件夹中,但未列为链接。

为刚刚重命名的图像生成缩略图也是如此。第一张图片只生成一个缩略图,如果忽略其余的图片。

这就是我的代码的样子:

<?php
session_start();
include('includes/imgit.class.php');
$IMGit = new imgit();

/**
* @ignore
*/
if (!defined('IN_IMGIT'))
{
    exit;
}

$IMGit->error_report(true);
$IMGit->disable(false);
$IMGit->ieNote(true);

if (isset($_POST['zipsent']) || $_POST['zipsent'] == true && isset($_FILES['archive']))
{   
    if ($_FILES['archive']['size'] <= MAX_ZIPSIZE)
    {
        // Main variables
        $key        = $IMGit->random_key(10);
        $move_zip   = move_uploaded_file($_FILES['archive']['tmp_name'], ZIP_PATH . $key . $_FILES['archive']['name']); 
        $zip        = ZIP_PATH . $key . $_FILES['archive']['name'];
        $extension  = substr($zip, -3);
        $filename   = $IMGit->zipContent($zip); // array
        $url        = str_replace('www.', '', $IMGit->generate_site_url());

        // ZIP limit is 100 images  
        if (sizeof($filename) <= 100)
        {
            // Only ZIP archives
            if ($extension == 'zip')
            {   
                if ($filename)
                {
                    foreach($filename as $key => $value)
                    {
                        // Get extension
                        $image_extension = substr($value, -3);
                        $image_extension = (strtoupper($image_extension)) ? strtolower($image_extension) : $image_extension;
                        $image_extRule   = $image_extension == JPG || $image_extension == JPEG || $image_extension == GIF || $image_extension == PNG || 
                                           $image_extension == BMP || $image_extension == ICO;

                        if ($image_extRule)
                        {
                            // Set variables and do some processing
                            $unZip       = $IMGit->unZip($zip, IMAGES_PATH);
                            $url         = str_replace('www.', '', $IMGit->generate_site_url());
                            $image_name  = $IMGit->random_key(7) . $value;
                            $image_name  = (strpos($image_name, ' ') !== false) ? str_replace(' ', '', $image_name) : $image_name;

                            if (file_exists(IMAGES_PATH . $filename[$key]))
                            {
                                // Rename extracted files
                                $rename = rename(IMAGES_PATH . $filename[$key], IMAGES_PATH . $image_name);

                                if ($rename && file_exists($zip) && sizeof($image_name))
                                {
                                    // Delete ZIP
                                    unlink($zip);   

                                    // Set URL variables
                                    $image_urls = $url . IMAGES_PATH . $image_name; 
                                    $image      = IMAGES_PATH . $image_name;    

                                    // Generate a thumbnail
                                    $IMGit->generate_thumbnail($image_urls, $image_name, THUMBNAIL_SIZE, THUMBNAIL_SIZE, true, 'file', false, false, THUMBS_PATH);
                                    $thumb_urls = $url . THUMBS_PATH . $image_name;

                                    $filename[] = array('direct' => $image_urls, 'thumb' => $thumb_urls);
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
else 
{
    header('Location: index.php');  
}

include('includes/header.php');
{
    if      ($_FILES['archive']['size'] > MAX_ZIPSIZE) { echo '<span id="home-info">The ZIP archive is bigger than 100 MB.</span>'; }
    else if ($extension != 'zip') { echo '<span id="home-info">Only ZIP archives are upload ready.</span>'; }
    else if (sizeof($filename) > 100) { echo '<span id="home-info">The number of the images inside the archive was more than 100.</span>'; }
    else if (!$image_extRule) { echo '<span id="home-info">The extensions inside the ZIP did not match our allowed extension list.</span>'; unlink($zip); } // unlink zip if failed
    else    { echo '<span id="home-info">Image(s) was/were successfully uploaded!</span>'; }
}
?>
</div>
<br /><br /><br />
<a href="index.php"><img src="css/images/site-logo.jpg" id="logo" /></a>
<br /><br /><br /><br /><br />
</div>

<div id="box">
<?php   
    global $filename, $image_urls, $thumb_urls;

    echo '<br />';
    echo '<div id="links">';
    echo '<table>';

    echo LINKS_DIRECT;
    for($i = 0; $i < sizeof($filename); $i++) { echo $filename[$i]['direct'] . "\n"; }
    echo LINKS_CLOSE;

    echo LINKS_THUMB;
    for($i = 0; $i < sizeof($filename); $i++) { echo $filename[$i]['thumb'] . "\n"; }
    echo LINKS_CLOSE;

    echo LINKS_BBCODE;
    for($i = 0; $i < sizeof($filename); $i++) { echo '[IMG]' . $filename[$i]['direct'] . '[/IMG]' . "\n"; } 
    echo LINKS_CLOSE;

    echo LINKS_HTML;
    for($i = 0; $i < sizeof($filename); $i++) { echo '<a href="' . $filename[$i]['direct'] . '"><img src="' . $filename[$i]['thumb'] . '" /></a>' . "\n"; }
    echo LINKS_CLOSE;

    echo '</table>';
    echo '<br />';
    echo '<input type="reset" id="resetbtn-remote" class="button-sub" value="&laquo; Upload more" />';
    echo '<br />';
    echo '</div>';
?>
</div>

<?php include('includes/footer.php'); ?>
</div>
</body>
</html>

我猜问题出在 foreach 循环内部(几天前是一个 for 循环,但遇到了同样的问题),但我似乎无法修复它。我将在一个简短的版本中重新解释:

  • 我上传了一个 Zip 存档
  • 脚本解压缩存档
  • 脚本重命名提取的文件
  • 必须为 Zip 中的所有图像生成缩略图(失败)
  • 应输出与 Zip 中的每个图像匹配的多个链接(失败)

想法?

【问题讨论】:

    标签: php html zip archive unzip


    【解决方案1】:

    您将变量 ($filename) 用于两个不同的目的。在顶部,添加这样的一行:

    $file_list = array();
    

    在后面的代码中,你可以这样做:

    $filename[] = array('direct' => $image_urls, 'thumb' => $thumb_urls);
    

    ...改成这样:

    $file_list[] = array('direct' => $image_urls, 'thumb' => $thumb_urls);
    

    稍后在您循环的代码中,改用foreach

    echo LINKS_DIRECT;
    foreach ($file_list as $this_file)
        echo $this_file['direct'] . "\n";
    echo LINKS_CLOSE;
    
    echo LINKS_THUMB;
    foreach ($file_list as $this_file)
        echo $this_file['thumb'] . "\n";
    echo LINKS_CLOSE;
    
    echo LINKS_BBCODE;
    foreach ($file_list as $this_file)
        echo '[IMG]' . $this_file['direct'] . '[/IMG]' . "\n";
    echo LINKS_CLOSE;
    
    echo LINKS_HTML;
    foreach ($file_list as $this_file)
        echo '<a href="' . $this_file['direct'] . '"><img src="' . $this_file['thumb'] . '" /></a>' . "\n";
    echo LINKS_CLOSE;
    

    你还有很多其他奇怪的事情在里面发生,比如对 HTML 片段使用常量。我认为您应该再看看那里的流程,并消除一些不必要的步骤和变量。我看到使用了几个 global 关键字...似乎没有必要。

    【讨论】:

    • 感谢您的回答,克里斯。不幸的是,这并没有解决我的问题。正如我在第一篇文章中所说,没有为图像生成缩略图。意味着问题出在重命名发生的地方。但是您的回答非常有用,因为我假设一旦问题得到解决,链接将使用您解释的表格显示。 - 现在请大家帮我找出问题所在。
    • 我发现了问题,但我没有解决它,因为我不知道如何解决。让我解释。请参阅代码中写着sizeof($image_name) 的部分。我将其更改为sizeof($image_name) &gt; 1,现在没有任何输出 - 意味着 $image_name 只生成一个名称。
    【解决方案2】:

    我只是通过删除以下代码部分解决了这个问题:

    file_exists($zip)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-05-30
      • 2019-08-16
      • 2011-11-11
      • 2013-04-19
      • 2013-11-06
      • 2016-12-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多