Visualizzazione dei risultati da 1 a 5 su 5
  1. #1

    [PHP] Try - Catch: quì qualcosa mi sfugge...

    In un mio script (di cui ho già aperto una discussione in precedenza) si occupa di uploadare un'immagine e di lavorarla.

    E' sorto un problema riguardo il parametro memory_limit, ovvero, l'immagine caricata non superava nessun limite ma al momento dell'inizio delle lavorazioni di resizing si piantava perché eccedeva nel limite di memoria di 24mb.

    Ora, siccome è snervante sta cosa volevo comunque gestire questo errore, quindi ho trasformato la funzione in una classe di modo da poter usare il costrutto try catch.

    Il bello però è che nonostante un try che include nella sua interezza tutte le istruzioni della funzione interna della classe e un bel catch alla fine, se ne sbatte altamente e quando arrivato al punto della funzione che chiama imagecreatefromjpeg() per la prima volta (dove si pianta insomma) invece di andare al catch e quindi registrare l'errore e comunque continuare senza piantarsi... beh, si pianta

    Praticamente è come se non fosse cambiato nulla... come se il try non esistesse...

    Dove ho sbagliato?

  2. #2
    Il costrutto try/catch permette di intercettare le eccezioni, non gli errori del PHP.

  3. #3
    Beh, ma allora a che serve?

    Cmq ho risolto +/-

    Ho impostato sulla mia macchina lo stesso memory limit di aruba, poi ho provato a caricare un'immagine via via rimpicciolita un pò fino a trovare la giusta grandezza.

    Poi ne ho calcolato la dimensione esatta con getimagesize, moltiplicando l'indice 0 con l'indice 1 e l'indice channels, l'ho divisa per 1024 due volte e mi è uscita la dimensione in mega.

    Diciamo che se l'immagine caricata sta sotto i 6,21mb scompattata può andare, quindi se supera i 6,21mb tronco subito l'operazione cacciando un errore, sempre meglio di niente.

  4. #4
    Originariamente inviato da Debiru
    Beh, ma allora a che serve?
    Ad intercettare le eccezione:

    http://www.php.net/manual/en/language.exceptions.php

    Originariamente inviato da Debiru
    Diciamo che se l'immagine caricata sta sotto i 6,21mb scompattata può andare, quindi se supera i 6,21mb tronco subito l'operazione cacciando un errore, sempre meglio di niente.
    E' un calcolo poco accurato. Se l'immagine è JPG rischi di sforare il memory limit anche con immagini molto piu' leggere (anche inferiori ai 200Kb).

  5. #5
    Nono, non è approssimativo, è un calcolo matematico.

    getimagesize mi restituisce un array con delle informazioni tra cui:

    0: width
    1: height
    channel: byte

    Ho aperto l'immagine che era riuscito a lavorare con photoshop e in basso mi calcolava 6,2mb di spazio occupato dall'immagine (quando invece salvata alla massima definizione jpg è 1,32mb su disco).

    Caricandola queste erano le specifiche restituite da getimagesize:

    0: 1700
    1: 1275
    channel: 3

    1700*1275*3/1024/1024 = 6,20 e qualcosa.

    In base alla qualità ed al tipo channel varia e di conseguenza aumenta o diminuisce l'effettiva grandezza quindi dovrebbe essere abbastanza buono come calcolo.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.