Мой скрипт не отображает ссылки должным образом - PullRequest
0 голосов
/ 26 июля 2011

Мне будет сложно объяснить всю ситуацию, но я попробую ...

Я создал скрипт для своего хоста изображений, который распаковывает 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 (не удается)

Идеи

Ответы [ 2 ]

1 голос
/ 26 июля 2011

Вы повторно используете переменную ($ 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 используемых ключевых слов ... ни одно из них не требуется.

0 голосов
/ 28 июля 2011

Я исправил эту проблему, просто удалив следующую часть кода:

file_exists($zip)
...