getimagesize no funciona en Windows 7 pero funciona en xp

getimagesize no funciona en Windows 7 pero funciona en XP. Cuando se ejecuta primero, devuelve FALSE, cuando se ejecuta de nuevo, no devuelve nada.

function ezImage($image,$pad = 5,$width = 0,$resize = 'full',$just = 'center',$border = ''){
        ...............
        ...............
        ...............
    $imageInfo = @getimagesize($image);

    if (!$imageInfo) {
    //remove tempfile for remote images
    if ($temp == true) unlink($image);
      return false;
    }

          .............
          .............
 }

En el caso de Windows 7, primero cuando va dentro del getimagesize función está devolviendo 0, y la segunda vez que se llama a esta función no está devolviendo nada. He comprobado la URL $image y esta bien Si ingreso la URL directamente en el navegador, muestra la imagen inmediatamente.

La primera ejecución arroja el siguiente mensaje de advertencia:

Warning: getimagesize(http://localhost/metornet/metornet_chart_paxalarm.php?title=MetorNet+Statistics&names%5B%5D=03%2F07%2F12%0A08%3A48+-%0A03%2F07%2F12%0A08%3A49&pax%5B%5D=0&alarms%5B%5D=0&rates%5B%5D=0.0&names%5B%5D=03%2F07%2F12%0A08%3A49+-%0A03%2F07%2F12%0A08%3A50&pax%5B%5D=0&alarms%5B%5D=0&rates%5B%5D=0.0&names%5B%5D=03%2F07%2F12%0A08%3A50+-%0A03%2F07%2F12%0A08%3A51&pax%5B%5D=0&alarms%5B%5D=0&rates%5B%5D=0.0&names%5B%5D=03%2F07%2F12%0A08%3A51+-%0A03%2F07%2F12%0A08%3A52&pax%5B%5D=0&alarms%5B%5D=0&rates%5B%5D=0.0&names%5B%5D=03%2F07%2F12%0A08%3A52+-%0A03%2F07%2F12%0A08%3A53&pax%5B%5D=0&alarms%5B%5D=0&rates%5B%5D=0.0&names%5B%5D=03%2F07%2F12%0A08%3A53+-%0A03%2F07%2F12%0A08%3A54&pax%5B%5D=0&alarms%5B%5D=0&rates%5B%5D=0.0&names%5B%5D=03%2F07%2F12%0A08%3A54+-%0A03%2F07%2F12%0A08%3A55&pax%5B%5D=0&alarms%5B%5D=0&rates%5B%5D=0.0&names%5B%5D=03%2F07%2F12%0A08%3A55+-%0A03%2F07%2F12%0A08%3A56&pax%5B%5D=0&am in C:\Program Files\..\..\Includes\ros_pdf_class\class.ezpdf.php on line 1344

La segunda ejecución arroja este error fatal: Fatal error: Maximum execution time of 120 seconds exceeded in C:\Program Files\.. \..\Includes\ros_pdf_class\class.ezpdf.php on line 1344

preguntado el 04 de julio de 12 a las 07:07

'getimagesize()' devuelve una matriz. Por favor, comparte tu código ¿cómo llamas a esto? -

PHP es del lado del servidor, por lo que el sistema operativo en el que ve una página PHP no debería afectarlo en absoluto; ya que todo ha sido procesado en el servidor. ¿Está seguro de que su código del lado del cliente es compatible con varios navegadores y no es la diferencia en el navegador entre los sistemas operativos lo que está afectando sus resultados? -

Estoy ejecutando mi navegador IE en modo compatible. Entonces también está dando el mismo problema. -

¿Quiere decir que está ejecutando Apache para Windows? -

sí Alvin, estoy ejecutando Apache en Windows. -

2 Respuestas

En primer lugar, el segundo error indica que está procesando demasiada información (Superado el tiempo máximo de ejecución de 120 segundos). Puede, con fines de depuración, modificar esto en su php.ini.

En segundo lugar, hay algo mal con ese primer mensaje de error que publicaste. (Puede ser correcto, pero se ve muy mal). La misma parte se repite y falta la parte de error real.

En primer lugar, asegúrese de que el $image el archivo al que intenta acceder existe con file_exists(), y que su carpeta de trabajo actual es la carpeta correcta con la combinación de getcwd() y chdir().

También necesitará comprobar su phpinfo() salida para el gd configuración, es posible que le falte la biblioteca requerida como gd funciones (como getimagesize()) están en esa cierta biblioteca.

Edit:

he visto que lo mencionas $image es una URL. Tenga cuidado, ya que no es un buen enfoque usar imágenes remotas en este contexto. Siempre debe recuperar un locales copia de dicho archivo de imagen (posiblemente usando cURL) y luego analizarlo localmente.

Usando la siguiente función (fuente), puede crear una copia local del archivo de imagen:

function save_image($img, $fullpath)
{
    $ch = curl_init($img);
    
    curl_setopt($ch, CURLOPT_HEADER, 0);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_BINARYTRANSFER,1);
    
    $rawdata=curl_exec($ch);
    curl_close ($ch);
    
    if(file_exists($fullpath)){
        unlink($fullpath);
    }

    $fp = fopen($fullpath,'x');
    fwrite($fp, $rawdata);
    fclose($fp);
}

$img es la dirección remota de la imagen, $fullpath es la ruta de guardado local.

Puedes usar ini_get('upload_tmp_dir') para recuperar el php.ini configuración de dónde se guardan las cargas de archivos (cuando utiliza el elemento de formulario HTML de carga de archivos). En Linux, es /tmp, con XAMPP, será C:\xampp\tmp.

Entonces, por ejemplo, para guardar un archivo temporal, puede ir save_image($img, ini_get('upload_tmp_dir')."/".time() );. Guardará un archivo temporal con la marca de tiempo actual, que se puede eliminar fácilmente después.

Respondido el 20 de junio de 20 a las 10:06

+1, muy buenos consejos y una respuesta bastante extensa que va más allá del alcance inicial de la pregunta. ¡Me gusta! :) - Fergus en Londres

Gracias Whisperity, gracias por su respuesta, pero en mi caso no puedo verificar file_exists porque el archivo en realidad no se creó inicialmente. Estamos dibujando la imagen con la URL pero no se guarda en ningún lugar. Entonces, también probé en xp file_exists con url fallando en xp también. En php.ini, la configuración de url está en "allow_url_fopen = On". Pero en xp, getimagesize puede obtener el tamaño de la imagen pero no en win7. - Suman

Una cosa nueva que observé hoy es que cuando paso la dirección IP del sistema en lugar de localhost en tamaño de imagen. es capaz de devolver el tamaño de la imagen, pero cuando doy localhost no puede obtener el tamaño y está fallando. Pero a través del navegador web puedo obtener la imagen en ambos casos cuando usamos la dirección IP y cuando usamos localhost también. Creo que la raíz del problema es que no se puede acceder a localhost a través de getimagesize en win7. ¿Alguien puede ayudar con esto? ¡Gracias de antemano! - Suman

Intenta usar 127.0.0.1 en lugar de localhost. - susurro

@Whisperity he usado 127.0.0.1 incluso se comporta igual que localhost. - Suman

Por alguna razón en Vista y Windows 7, localhost/127.0.0.1 no funciona fuera de la caja. Para que funcione, debe agregar esta línea a la c:\windows\system32\drivers\etc\hosts file: 127.0.0.1 localhost.

En realidad, encontrará esta línea en el archivo host, pero está comentada, por lo que puede quitar el comentario de la línea. getimage size también funciona bien con localhost. Gracias por sus valiosos comentarios y sugerencias.

Respondido 01 Feb 17, 15:02

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.