Pregunta

Me estaba necesitando una manera de generar imágenes en miniatura (usando PHP5) para una secuencia de comandos de gestión de imágenes y tenía un problema donde mi anfitrión tiene múltiples versiones de PHP instalado (4 y 5), con juego de PHP4 como predeterminado. Esto significaba que cualquier llamada a PHP desde la línea de comandos correrían PHP4. Yo he llegado con la siguiente como lo que espero ser una solución multiplataforma. He publicado aquí en primer lugar ya que tenía un montón de problemas para encontrar ayuda para utilizar Google, por lo que esto podría ayudar a alguien en el futuro, también tengo las siguientes preguntas.

  1. ¿Ves algo obviamente mal con él?
  2. ¿Hay otros caminos para el binario PHP5 que usted sabe o sabe de un mejor fin de tener la matriz para la optimización?
  3. Si un host tiene exec shell_exec discapacitados, será el guión EGalleryProcessQueue.php ser capaz de ser ejecutado como un trabajo independiente cron? No tengo acceso a cron para poder probar esto todavía. No estoy demasiado preocupado por esta cuestión, como voy a conseguir en torno a las pruebas con el tiempo de todos modos.
  4. ¿alguien tiene alguna sugerencia en cuanto a la manera en la que puedo obtener alguna información sobre hasta qué punto las imágenes a través del procesamiento es? Ver la sección de TODO EGalleryProcessQueue.php me gustaría mostrar una barra de progreso cuando se encuentra en la sección de administración.

script principal

/**
 * 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;
}
?>
¿Fue útil?

Solución

  

¿Ves algo obviamente mal con él?

No, el código se ve bien.

  

¿Hay otros caminos para el binario PHP5 que usted sabe o sabe de un mejor fin de tener la matriz para la optimización?

Esta es una pregunta difícil de responder, ya que PHP puede ser instalado en cualquier lugar en el servidor. Los caminos que tiene parecen ser muy lógico para mí, pero podría ser cualquier número de otros lugares que se podrían instalar.

En lugar de proporcionar un montón de directorios donde se haya instalado PHP5, ¿qué hay de tener un parámetro que el usuario tiene que establecer para proporcionar la ruta de acceso al archivo ejecutable PHP5 si no está en su $ PATH?

  

Si un host tiene exec shell_exec discapacitados, será el guión EGalleryProcessQueue.php podrá ser ejecutado a través de una tarea programada?

Yo no lo he probado, pero yo asumiría que impida la secuencia de comandos se ejecute.

  

¿alguien tiene alguna sugerencia en cuanto a la manera en la que puedo obtener alguna información sobre hasta qué punto las imágenes a través del procesamiento es? Ver la sección de TODO EGalleryProcessQueue.php me gustaría mostrar una barra de progreso cuando se encuentra en la sección de administración.

tienda del número de imágenes en alguna parte (archivo, db, tal vez incluso sesión var) completados y tienen un fuego llamada AJAX cada segundo más o menos a una función que proporciona realiza vs total. A continuación, utilizar algo así como http://docs.jquery.com/UI/Progressbar

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top