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.
- Onunla Açıkçası yanlış bir şey görüyor musunuz?
- Biliyor veya optimizasyonu için dizi için daha iyi bir düzenin biliyorum php5 ikili için başka yollar var mı?
- 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.
- 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;
}
?>