Visualizzazione risultati 1 fino 24 di 24
Like Tree3Likes
  • 1 Post By mzanella
  • 1 Post By mzanella
  • 1 Post By mzanella

Discussione: Installazione libreria PHP

  1. #1
    Data registrazione
    01-01-2020
    Messaggi
    21

    Predefinito Installazione libreria PHP

    Buongiorno,

    dovrei installare una liberia PHP, Imagick, che mi permette di ridimensionare più immagini durante un upload, e per farlo mi pare di aver capito che devo poter accedere al file php.ini.
    Ora, ho letto che su AlterVista non è possibile modificarlo: esiste quindi un altro modo per installare la libreria, forse sfruttando il file .htaccess?

    Ringraziando anticipatamente per l'attenzione vi auguro una buona giornata.

  2. #2
    mzanella non è connesso AlterGuru
    Data registrazione
    29-12-2015
    Messaggi
    1,954

    Predefinito

    ImageMagick è già installato su AlterVista.
    Edit: ImageMagick non è installato su AlterVista, è possibile usare invece PHP GD.
    Ultima modifica di mzanella : 22-04-2020 alle ore 19.03.01

    I suggerimenti che do più spesso:


  3. #3
    Data registrazione
    01-01-2020
    Messaggi
    21

    Predefinito

    Fantastico, grazie dell'informazione!

    A questo punto avrei un'altra domanda.
    Ho un codice per l'upload di più immagini come il seguente (non badate ai problemi di sicurezza; l'ho semplificato):

    Codice PHP:
    for ($i = 0; $i < $total; $i++) {
    $tmpFilePath = $_FILES['upload']['tmp_name'][$i];
    if (
    $tmpFilePath != '') {
    $newFilePath = "./uploadFiles/" . $_FILES['upload']['name'][$i];
    $nomeCompletoFile = basename($_FILES["upload"]["name"][$i]);
    $target_file = "uploads/$nomeCompletoFile";
    $estensione = strtolower(pathinfo($target_file, PATHINFO_EXTENSION));
    if(
    $estensione == 'jpg') {
    $nomeFinaleFile = uploads/'.$id.'.'.$estensione;
    $id = rand(1, 100000);
    if (move_uploaded_file($_FILES["upload"]["tmp_name"][$i], $nomeFinaleFile)) {
    echo '
    Upload eseguito con successo';
    }
    }
    }
    }
    Su internet ho trovato il seguente codice per il ridimensionamento di una singola immagine

    Codice PHP:
    $im = new imagick("c:\\temp\\523764_169105429888246_1540489537_n.jpg");
    $imageprops = $im->getImageGeometry();
    $width = $imageprops['width'];
    $height = $imageprops['height'];
    if(
    $width > $height){
    $newHeight = 80;
    $newWidth = (80 / $height) * $width;
    }else{
    $newWidth = 80;
    $newHeight = (80 / $width) * $height;
    }
    $im->resizeImage($newWidth,$newHeight, imagick::FILTER_LANCZOS, 0.9, true);
    $im->cropImage (80,80,0,0);
    $im->writeImage( "D:\\xampp\\htdocs\\th_80x80_test.jpg" );
    Avendo iniziato da poco a imparare PHP, qualcuno saprebbe aiutarmi a "integrare" il codice trovato su internet con quello che ho già creato io, in modo che le immagini caricate vengano ridimensionate automaticamente e salvate?
    (Attualmente le immagini caricate vengono salvate direttamente, senza subire ridimensionamenti).


    Un grazie in anticipo!
    Ultima modifica di bibibescimonelli : 22-04-2020 alle ore 18.10.56

  4. #4
    mzanella non è connesso AlterGuru
    Data registrazione
    29-12-2015
    Messaggi
    1,954

    Predefinito

    Esempio di stoltezza quale sono ho confuso ImageMagick con PHP GD. ImageMagick non è presente né installabile su AlterVista. Fortunatamente puoi utilizzare PHP GD, che invece è installato:
    Codice PHP:
    $file_name = percorso del file immagine

    list($width, $height, $type, $attr) = getimagesize($file_path);
    $img = imagecreatefromjpeg($file_path);
    if (
    $width > $height) {
    $img = imagescale($img, 80 / $height);
    }
    else {
    $img = imagescale($img, 80);
    }
    imagejpeg($img, basename($file_name) . '_scaled.jpg');

    I suggerimenti che do più spesso:


  5. #5
    Data registrazione
    01-01-2020
    Messaggi
    21

    Predefinito

    Penso che anche GD vada benone per me.

    Avrei però due domande:¨
    1. Invece di inserire l'URL dell'immagine che si vuole ridimensionare, è possibile fare una cosa di questo tipo?
    Codice PHP:
    $file_name = $_FILES['upload']['tmp_name'][$i];
    2. Come posso, alla fine, caricare l'immagine ridimensionata in una cartella, come facevo nel codice che ho postato sopra?

    Nel vecchio codice facevo nel seguente modo, adesso non saprei come fare:
    Codice PHP:
    if (move_uploaded_file($_FILES["upload"]["tmp_name"][$i], $nomeFinaleFile)) { // Carico il file in una cartella
    echo 'Upload eseguito con successo';
    }

  6. #6
    mzanella non è connesso AlterGuru
    Data registrazione
    29-12-2015
    Messaggi
    1,954

    Predefinito

    Non serve l'URL, puoi utilizzare il percorso in cui hai caricato l'immagine, quello che hai chiamato $nomeFinaleFile.
    Complessivamente devi prima caricare l'immagine con il codice che hai già, quindi utilizzare lo script per il ridimensionamento sull'immagine già caricata.

    I suggerimenti che do più spesso:


  7. #7
    Data registrazione
    01-01-2020
    Messaggi
    21

    Predefinito

    Ciao,

    ho risolto il tutto adottando la semplicissima soluzione descritta e fornita qui.

    Grazie ancora, buona serata!

  8. #8
    Data registrazione
    01-01-2020
    Messaggi
    21

    Predefinito

    Avrei a questo punto un'ultima domanda.
    Quello seguente è il mio codice attuale.

    Codice PHP:
    include('SimpleImage.php');

    $image = new SimpleImage();
    $image->load($_FILES['upload']['tmp_name'][$i]);
    $image->resizeToWidth(500);
    $image->save(nomeFinaleFile);
    In che modo posso verificare che l'upload sia avvenuto correttamente?
    Mi spiego meglio. In precedenza, quando le immagini non venivano ridimensionate, facevo il controllo in questo modo:

    Codice PHP:
    if (move_uploaded_file($_FILES["upload"]["tmp_name"][$i], $nomeFinaleFile)) {
    echo
    "Upload eseguito con successo";
    } else {
    echo
    "Errore durante l'upload";
    }
    Adesso ho provato a fare una cosa come la seguente, ma non funziona.
    Sapreste aiutarmi?

    Codice PHP:
    if ($image->save($_FILES["upload"]["tmp_name"][$i])) { // Non funziona: esce sempre il secondo messaggio d'errore
    echo "Upload eseguito con successo";
    } else {
    echo
    "Errore durante l'upload";
    }
    Ultima modifica di bibibescimonelli : 23-04-2020 alle ore 01.12.05

  9. #9
    mzanella non è connesso AlterGuru
    Data registrazione
    29-12-2015
    Messaggi
    1,954

    Predefinito

    Questo è un limite della classe che stai usando: se il file non esiste non gestisce l'errore.
    La soluzione è la stessa di cui parlavo nei messaggi precedenti: prima sposti l'immagine nella cartella di destinazione, poi la ridimensioni:
    Codice PHP:
    include('SimpleImage.php');

    if (
    move_uploaded_file($_FILES["upload"]["tmp_name"][$i], $nomeFinaleFile)) {
    echo
    "Upload eseguito con successo";
    $image = new SimpleImage();
    $image->load($nomeFinaleFile);
    $image->resizeToWidth(500);
    $image->save(nomeFinaleFile);
    } else {
    echo
    "Errore durante l'upload";
    }

    I suggerimenti che do più spesso:


  10. #10
    Data registrazione
    01-01-2020
    Messaggi
    21

    Predefinito

    Il problema non sta nel fatto se il file esista o meno (lo controllo già prima in altri modi), bensì se, semplicemente, avvenga un errore durante il ridimensionamento (i motivi di un errore possono essere molteplici, e penso che sia sempre bene pensare a includere un messaggio d'errore).


    Non è neppure possibile mostrare un messaggio modificando il file SimpleImage.php, che trovate di seguito?


    Codice PHP:
    <?php

    /*
    * File: SimpleImage.php
    * Author: Simon Jarvis
    * Copyright: 2006 Simon Jarvis
    * Date: 08/11/06
    * Link: http://www.white-hat-web-design.co.uk/articles/php-image-resizing.php
    *
    * This program is free software; you can redistribute it and/or
    * modify it under the terms of the GNU General Public License
    * as published by the Free Software Foundation; either version 2
    * of the License, or (at your option) any later version.
    *
    * This program is distributed in the hope that it will be useful,
    * but WITHOUT ANY WARRANTY; without even the implied warranty of
    * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
    * GNU General Public License for more details:
    * http://www.gnu.org/licenses/gpl.html
    *
    */

    class SimpleImage {

    var
    $image;
    var
    $image_type;

    function
    load($filename) {

    $image_info = getimagesize($filename);
    $this->image_type = $image_info[2];
    if(
    $this->image_type == IMAGETYPE_JPEG ) {

    $this->image = imagecreatefromjpeg($filename);
    } elseif(
    $this->image_type == IMAGETYPE_GIF ) {

    $this->image = imagecreatefromgif($filename);
    } elseif(
    $this->image_type == IMAGETYPE_PNG ) {

    $this->image = imagecreatefrompng($filename);
    }
    }
    function
    save($filename, $image_type=IMAGETYPE_JPEG, $compression=75, $permissions=null) {

    if(
    $image_type == IMAGETYPE_JPEG ) {
    imagejpeg($this->image,$filename,$compression);
    } elseif(
    $image_type == IMAGETYPE_GIF ) {

    imagegif($this->image,$filename);
    } elseif(
    $image_type == IMAGETYPE_PNG ) {

    imagepng($this->image,$filename);
    }
    if(
    $permissions != null) {

    chmod($filename,$permissions);
    }
    }
    function
    output($image_type=IMAGETYPE_JPEG) {

    if(
    $image_type == IMAGETYPE_JPEG ) {
    imagejpeg($this->image);
    } elseif(
    $image_type == IMAGETYPE_GIF ) {

    imagegif($this->image);
    } elseif(
    $image_type == IMAGETYPE_PNG ) {

    imagepng($this->image);
    }
    }
    function
    getWidth() {

    return
    imagesx($this->image);
    }
    function
    getHeight() {

    return
    imagesy($this->image);
    }
    function
    resizeToHeight($height) {

    $ratio = $height / $this->getHeight();
    $width = $this->getWidth() * $ratio;
    $this->resize($width,$height);
    }

    function
    resizeToWidth($width) {
    $ratio = $width / $this->getWidth();
    $height = $this->getheight() * $ratio;
    $this->resize($width,$height);
    }

    function
    scale($scale) {
    $width = $this->getWidth() * $scale/100;
    $height = $this->getheight() * $scale/100;
    $this->resize($width,$height);
    }

    function
    resize($width,$height) {
    $new_image = imagecreatetruecolor($width, $height);
    imagecopyresampled($new_image, $this->image, 0, 0, 0, 0, $width, $height, $this->getWidth(), $this->getHeight());
    $this->image = $new_image;
    }

    }
    ?>

    Grazie, buona giornata

  11. #11
    mzanella non è connesso AlterGuru
    Data registrazione
    29-12-2015
    Messaggi
    1,954

    Predefinito

    Devi prendere quella classe e aggiungere un controllo in ogni punto in cui potenzialmente possono esserci errori.
    Per esempio:
    Codice PHP:
    function save($filename, $image_type = IMAGETYPE_JPEG, $compression = 75, $permissions = null) {
    if (
    $image_type == IMAGETYPE_JPEG) {
    $result = imagejpeg($this->image, $filename, $compression);
    } elseif (
    $image_type == IMAGETYPE_GIF) {
    $result = imagegif($this->image,$filename);
    } elseif (
    $image_type == IMAGETYPE_PNG) {
    $result = imagepng($this->image,$filename);
    } else {
    echo
    "Unknown type of image.";
    return
    false;
    }

    if (
    $result === false || !file_exists($filename)) {
    echo
    "Cannot write image.";
    return
    false;
    }

    if(
    $permissions != null) {
    if (
    chmod($filename, $permissions) === false) {
    echo
    "Cannot change permission.";
    return
    false;
    }
    }

    return
    true;
    }
    E questo va fatto per ogni metodo della classe.

    In questo caso ho usato semplicemente una echo seguita da un return false in caso di errore: vedi tu come gestirlo. Puoi usare eccezioni, die, e simili.

    Edit: un'altra cosa che ho notato è che quella classe non prevede il rilascio della memoria quando un'immagine non viene più utilizzata. Non è un gran problema, però...
    Ultima modifica di mzanella : 23-04-2020 alle ore 10.22.55
    bibibescimonelli likes this.

    I suggerimenti che do più spesso:


  12. #12
    Data registrazione
    01-01-2020
    Messaggi
    21

    Predefinito

    Ciao!


    Con "rilascio della memoria" intendi imagedestroy()? Come posso integrarlo nel mio codice?

    Grazie!
    Ultima modifica di bibibescimonelli : 23-04-2020 alle ore 13.55.45

  13. #13
    mzanella non è connesso AlterGuru
    Data registrazione
    29-12-2015
    Messaggi
    1,954

    Predefinito

    Si, intendo imagedestroy. Andrebbe chiamato ogni volta che l'immagine definita come variabile d'istanza perde la possibilità di essere referenziata. Mi sembra ci siano solo due casi in cui questo può accadere: la distruzione dell'oggetto e il caricamento di una nuova immagine (probabilmente nel tuo contesto solo il primo è rilevante, ma tanto vale non lasciare nulla in sospeso). D'altro canto la deallocazione deve avvenire solo se prima c'è stata un'allocazione. Credo che un test con empty sia sufficiente a questo scopo.

    Quindi il metodo load diventa (oltre all'aggiunta del controllo degli errori)
    Codice PHP:
    function load($filename) {
    if (!empty(
    this->image)) {
    imagedestroy($this->image);
    }

    $image_info = getimagesize($filename);
    $this->image_type = $image_info[2];
    if(
    $this->image_type == IMAGETYPE_JPEG ) {
    $this->image = imagecreatefromjpeg($filename);
    } elseif(
    $this->image_type == IMAGETYPE_GIF ) {
    $this->image = imagecreatefromgif($filename);
    } elseif(
    $this->image_type == IMAGETYPE_PNG ) {
    $this->image = imagecreatefrompng($filename);
    }
    }
    e va definito un distruttore:
    Codice PHP:
    function __destruct() {
    if (!empty(
    this->image)) {
    imagedestroy($this->image);
    }
    }
    In effetti un controllo simile dovrebbe comparire in quasi tutti i metodi, in modo da avere la garanzia che questi vengano chiamati solo su un'immagine effettivamente caricata, ovvero che venga segnalato un errore qualora si invochino metodi come resize o save senza aver prima invocato load.
    Probabilmente avrebbe più senso rendere il costruttore privato e il metodo load statico, in modo che l'unico modo per ottenere un oggetto SimpleImage sia attraverso quest'ultimo, garantendo quindi che l'attributo $image sia sempre definito.
    bibibescimonelli likes this.

    I suggerimenti che do più spesso:


  14. #14
    Data registrazione
    01-01-2020
    Messaggi
    21

    Predefinito

    Ciao,

    avrei due domande:
    1) Come posso aggiungere il controllo degli errori per la fnziona load/resize?
    2) La funziona __destruct deve essere invocata? Se sì, come?

    Grazie, buona serata

  15. #15
    mzanella non è connesso AlterGuru
    Data registrazione
    29-12-2015
    Messaggi
    1,954

    Predefinito

    Come posso aggiungere il controllo degli errori per la funzione load/resize?
    In generale, ogni volta che chiami una funzione fai riferimento alla guida per vedere se può fallire, quindi prevedi un'azione in caso di fallimento.
    Codice PHP:
    function load($filename) {
    if (!
    file_is_readable($filename) {
    echo
    "Image does not exist.";
    return
    false;
    }

    $image_info = getimagesize($filename);
    if (
    $image_info === false9 {
    echo
    "Cannot read image info.";
    return
    false;
    }

    $this->image_type = $image_info[2];
    if (
    $this->image_type == IMAGETYPE_JPEG) {
    $this->image = imagecreatefromjpeg($filename);
    } elseif (
    $this->image_type == IMAGETYPE_GIF) {
    $this->image = imagecreatefromgif($filename);
    } elseif (
    $this->image_type == IMAGETYPE_PNG) {
    $this->image = imagecreatefrompng($filename);
    } else {
    echo
    "Unsupported type of image.";
    return
    false;
    }

    if (
    $this->image === false) {
    echo
    "Cannot read image.";
    return
    false;
    }

    return
    true;
    }
    Codice PHP:
    function resize($width, $height) {
    if (empty(
    $this->image)) {
    echo
    "No image to resize.";
    return
    false;
    }

    if (
    $width <= 0 || $height <= 0) {
    echo
    "Both width and height must be positive.";
    return
    false;
    }

    $new_image = imagecreatetruecolor($width, $height);
    if (
    $new_image === false) {
    echo
    "Cannot allocate image.";
    return
    false;
    }

    if (
    imagecopyresampled($new_image, $this->image, 0, 0, 0, 0, $width, $height, $this->getWidth(), $this->getHeight()) == false) {
    echo
    "Cannot resize image.";
    return
    false;
    }

    if (
    imagedestroy($this->image) == false) {
    echo
    "Cannot deallocate old image.";
    return
    false;
    }

    $this->image = $new_image;
    return
    true;
    }
    La funziona __destruct deve essere invocata? Se sì, come?
    In PHP i distruttori sono invocati automaticamente quando un oggetto diventa non referenziabile, non devi fare nulla.
    Ultima modifica di mzanella : 24-04-2020 alle ore 09.34.42
    bibibescimonelli likes this.

    I suggerimenti che do più spesso:


  16. #16
    Data registrazione
    01-01-2020
    Messaggi
    21

    Predefinito

    Ciao,

    ti ringrazio per le risposte sempre precise e puntuali!
    Per intanto ho risolto tutti i miei dubbi, se in futuro ne avrò altri mi permetterò di mandare un altro messaggio in questa pagina.

    Buona serata

  17. #17
    mzanella non è connesso AlterGuru
    Data registrazione
    29-12-2015
    Messaggi
    1,954

    Predefinito

    Figurati .

    I suggerimenti che do più spesso:


  18. #18
    peppelog non è connesso Utente AlterBlog
    Data registrazione
    25-09-2010
    Messaggi
    21

    Predefinito

    È molto strano che su altervista non sia installato imagemagick; io sono arrivato qui perché wordpress m'ha detto di installarlo/abilitarlo. Si può chiedere alla sala macchine di aggiungerlo?

  19. #19
    L'avatar di alemoppo
    alemoppo non è connesso Staff AV
    Data registrazione
    24-08-2008
    Residenza
    PU / BO
    Messaggi
    22,160

    Predefinito

    Citazione Originalmente inviato da peppelog Visualizza messaggio
    io sono arrivato qui perché wordpress m'ha detto di installarlo/abilitarlo
    In che senso? Intendi che è necessario per qualche plugin? Se sì quale? Puoi mostrare il messaggio?

    Ciao!

  20. #20
    peppelog non è connesso Utente AlterBlog
    Data registrazione
    25-09-2010
    Messaggi
    21

    Predefinito

    Questo è il messaggio: https://imgur.com/a/RDAcf3q
    Ultima modifica di peppelog : 26-07-2020 alle ore 22.46.42

  21. #21
    L'avatar di Jowy
    Jowy non è connesso AlterVistiano
    Data registrazione
    29-08-2002
    Residenza
    Livorno
    Messaggi
    869

    Predefinito

    È raccomandato, non obbligatorio. WordPress funziona benissimo senza, puoi tranquillamente ignorare quell’avviso.
    Non è solo AV a non averlo e non ti creerà noie

  22. #22
    peppelog non è connesso Utente AlterBlog
    Data registrazione
    25-09-2010
    Messaggi
    21

    Predefinito

    Sì, però, ecco, wordpress non è esattamente un cms raro, su altervista sarà usato da almeno la metà dei siti.

    (In ogni caso, a me importa molto poco... facendo due-tre post l'anno vivo benissimo senza imagemagick)

  23. #23
    L'avatar di alemoppo
    alemoppo non è connesso Staff AV
    Data registrazione
    24-08-2008
    Residenza
    PU / BO
    Messaggi
    22,160

    Predefinito

    Citazione Originalmente inviato da peppelog Visualizza messaggio
    wordpress non è esattamente un cms raro, su altervista sarà usato da almeno la metà dei siti
    È vero. Addirittura c'è un account dedicato per WordPress gestito da AlterVista, con spazio e banda illimitati oltre ad avere una versione WordPress personalizzata gestita da AlterVista (con impostazioni facilitate e servizi aggiuntivi rispetto la versione "originale").

    Ciao!

  24. #24
    peppelog non è connesso Utente AlterBlog
    Data registrazione
    25-09-2010
    Messaggi
    21

    Predefinito

    Citazione Originalmente inviato da alemoppo Visualizza messaggio
    Addirittura c'è un account dedicato per WordPress gestito da AlterVista
    Sì, lo so, una volta lo usavo. Non ricordo più perché decisi di passare a un'installazione manuale, probabilmente non ero più abituato alle limitazioni del SaaS.

    Grazie :)

Tags for this Thread

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •