Yüklü birden PHP sürümleri ile paylaşılan ana Arkaplan betik

1 Cevap php

Ben bir resim yönetim komut dosyası için küçük (PHP5 kullanarak) oluşturmak için bir yol ihtiyacı ve benim ana PHP kurulu birden çok sürümü vardır problemi (4 ve 5), varsayılan olarak PHP4 seti vardı. Bu CLI php için herhangi bir çağrı PHP4 koşmak anlamına geliyordu. Ben ben bir çapraz platform çözümü için umut ne gibi aşağıdaki ile geldim. Ben belada Google'ı kullanarak herhangi bir yardım bulmak bir sürü vardı öncelikle burada post ediyorum, bu yüzden gelecekte birisi yardımcı olabilir, ben de şu soru var.

  1. Onunla Açıkçası yanlış bir şey görüyor musunuz?
  2. Biliyor veya optimizasyonu için dizi için daha iyi bir düzenin biliyorum php5 ikili için başka yollar var mı?
  3. Bir ev sahibi engelli exec veya shell_exec varsa, EGalleryProcessQueue.php komut bağımsız bir cron işi olarak çalıştırılması mümkün olacak? Ben henüz bu test edebilmek için cron erişimi yok. Ben sonunda yine de test etrafında alırsınız gibi, bu soru hakkında çok endişeli değilim.
  4. Herkes ne kadar işleme görüntüleri aracılığıyla bazı geribildirim almak hangi bir şekilde herhangi bir öneriniz var mı? Ben admin bölümünde olduğunda bir ilerleme çubuğu görüntülemek istediğiniz EGalleryProcessQueue.php arasında YAPıLACAK bölümüne bakın.

Ana betik

/**
 * Writes the array to a text file in /path/to/gallery/needsThumbs.txt for batch processing.
 * Runs the thumbnail generator script in the background.
 *
 * @param array $_needsThumbs the array of images needing thumbnails
 */
private function generateThumbnails($_needsThumbs)
{
    file_put_contents($this->_realpath.DIRECTORY_SEPARATOR.'needsThumbs.txt',serialize($_needsThumbs));

    $Command = realpath(dirname(__FILE__)).DIRECTORY_SEPARATOR.'EGalleryProcessQueue.php '.$this->_realpath.' '.$this->thumbnailWidth.' '.$this->thumbnailHeight;

    if(PHP_SHLIB_SUFFIX == 'so')// *nix (aka NOT windows)
    {
        /*
         * We need to make sure we are using the right PHP version
         * (problems with shared hosts that have PHP4 and PHP5 installed,
         * but PHP4 set as default).
         */
        $phpPaths = array('php', '/usr/local/bin/php', '/usr/local/php5/bin/php', '/usr/bin/php', '/usr/bin/php5');
        foreach($phpPaths as $path)
        {
            exec("echo '<?php echo version_compare(PHP_VERSION, \"5.0.0\", \">=\"); ?>' | $path", $result);
            if($result)
            {
                shell_exec("nohup $path $Command 2> /dev/null > /dev/null &");
                break;
            }
        }
    }
    else // Windows
    {
        $WshShell = new COM("WScript.Shell");
        $WshShell->Run("php.exe $Command", 0, false);
    }
}

EGalleryProcessQueue.php

#!/usr/bin/php
<?php

if ($argc === 4 && strstr($argv[0], basename(__FILE__))) {
    // File is being called by the CLI and has not been included by another script

    if(!file_exists($argv[1].DIRECTORY_SEPARATOR.'needsThumbs.txt'))
    {
        // Either no thumbnails need to be created or a wrong directory has been supplied
        exit;
    }

    include(realpath(dirname(__FILE__)).DIRECTORY_SEPARATOR.'EGalleryThumbGenerator.php');

    $generator = new EGalleryThumbGenerator;
    $generator->directory = $argv[1];
    $generator->thumbnailWidth = is_int($argv[2]) ? $argv[2] : 128;
    $generator->thumbnailHeight = is_int($argv[3]) ? $argv[3] : 128;

    // $generator->processImages() returns the number of images left to process (it does them in blocks of 10)
    while (($i = $generator->processImages()) > 0)
    {
        /*
         * TODO Can we get some sort of feedback to the user here?
         * Possibly so that we can display a progress bar in the management section.
         * Probably have to write $i to a file to be read by the main script.
         */
    }

    exit;
}
?>

1 Cevap

Onunla Açıkçası yanlış bir şey görüyor musunuz?

Hayır, kod iyi görünüyor.

Biliyor veya optimizasyonu için dizi için daha iyi bir düzenin biliyorum php5 ikili için başka yollar var mı?

Bu PHP bir sunucu üzerinde herhangi bir yere monte edilebilir gibi, cevabı zor bir soru. Yolları bana çok mantıklı gibi görünüyor var, ancak yüklü olabilir diğer yerlerde herhangi bir sayı olabilir.

Aksine PHP5 yüklü olabilir dizinleri bir demet sunan daha, ne kullanıcı kendi $ PATH değilse PHP5 yürütülebilir yolunu sağlamak için ayarlanmış gereken bir parametre sahip hakkında?

Bir ev sahibi exec veya özürlü shell_exec varsa, EGalleryProcessQueue.php script cron job ile çalıştırmak mümkün olacak?

Ben henüz denemedim, ama bu çalışmasını komut önleyecek varsayılabilir.

Herkes ne kadar işleme görüntüleri aracılığıyla bazı geribildirim almak hangi bir şekilde herhangi bir öneriniz var mı? Ben admin bölümünde olduğunda bir ilerleme çubuğu görüntülemek istediğiniz EGalleryProcessQueue.php arasında YAPıLACAK bölümüne bakın.

Yerde tamamlanan görüntülerin sayısını (dosya, db, hatta belki oturum var) depolamak ve toplamda vs yapılır sağlayan bir işleve her saniye ya da öylesine bir AJAX çağrısı yangın var. Sonra gibi bir şey kullanmak http://docs.jquery.com/UI/Progressbar