[risolto] Sito lentissimo, è il mio script?

IImanuII

Utente Attivo
10 Giu 2012
390
0
16
Ragazzi ho un sito hostato su netsons e come l'utenza è aumentata di pochissimo 100/200 online il sito carica in maniera lentissima.
Ho paura che la colpa sia mia, difatti l'unico error log che vedo è questo

PHP:
[13-Mar-2014 12:44:41 Europe/Berlin] PHP Warning:  imagecreatefromjpeg() [<a href='function.imagecreatefromjpeg'>function.imagecreatefromjpeg</a>]: Cannot read image data in percorso* on line 4
[13-Mar-2014 12:44:41 Europe/Berlin] PHP Warning:  imagecopyresampled() expects parameter 1 to be resource, boolean given in percorso* on line 7
[13-Mar-2014 12:44:41 Europe/Berlin] PHP Warning:  imagejpeg() expects parameter 1 to be resource, boolean given in percorso*on line 10
[13-Mar-2014 12:44:41 Europe/Berlin] PHP Warning:  imagedestroy() expects parameter 1 to be resource, boolean given in percorso* on line 12

Lo script interessato è uno script che fa in modo di fare il resize di un'immagine e dopo di sovrapporne due.
Ho pensato che magari fosse quello, vi posto i file interessati

Il file index.php

PHP:
<?php
$site_url='http://'.$_SERVER['SERVER_NAME'].implode("/", explode("/", $_SERVER['PHP_SELF'], -1)).'/';

$dest = imagecreatefromjpeg($site_url."resize.php");
$src = imagecreatefrompng("play.png");

imagecopyresampled($dest, $src, 0, 0, 0, 0, 700, 300, 700, 300); 

header('Content-Type: image/jpeg');
imagejpeg($dest);

imagedestroy($dest);
imagedestroy($src);
?>

e resize.php

PHP:
/*
 * PHP GD
 * resize an image using GD library
 */

// File and new size
//the original image has 800x600
$filename = 'video.jpg';
//the resize will be a percent of the original size
//$percent = 0.5;

// Content type
header('Content-Type: image/jpeg');

// Get new sizes
list($width, $height) = getimagesize($filename);
$newwidth = 700;//$width * $percent;
$newheight = 300;//$height * $percent;

// Load
$thumb = imagecreatetruecolor($newwidth, $newheight);
$source = imagecreatefromjpeg($filename);

// Resize
imagecopyresized($thumb, $source, 0, 0, 0, 0, $newwidth, $newheight, $width, $height);

// Output and free memory
//the resized image will be 400x300
imagejpeg($thumb);
imagedestroy($thumb);

Ovviamente poi ci sono 2 immagini in formato jpg

Questo script serve per creare un'anteprima.

E' urgentissimo, non è che potete darmi una mano? Non è che lo script consuma troppe risorse perchè scritto male? Oppure non è che ogni volta fa il resiza dell'immagine e quindi genera errore?

Help :crying:
 

flameseeker

Utente Attivo
27 Nov 2013
699
0
0
Lavorare con le GD consuma molte risorse, non dovresti mai far generare a PHP le anteprime ogni volta che un utente le richiede per la normale navigazione.

Piuttosto fai si di salvarti l'anteprima generata dalla prima richiesta così che, nelle successive, se disponi del file di cache salvato in precedenza lo mostri senza passare più per le GD.


In ogni caso, la lentezza potrebbe essere frutto anche di una mancata ottimizzazione del database:
  • Le colonne delle tue tabelle hanno valori di dimensionamento appropriati per il dato che devono contenere ? (esempio: se i nickname dei tuoi utenti non possono superare i 20 caratteri non ha senso un varchar(50), se devi archiviare un valore numerico intero molto basso non ha senso un INT(10) e così via
  • Le colonne chiave che sfrutti per la ricerca con le tue query sono indicizzate ?
  • Tra le tue procedure ce ne sono alcune che fanno eseguire delle query all'interno di cicli while/for ?
  • Hai query che realizzano Join fullscan su più tabelle molto voluminose ?
 

IImanuII

Utente Attivo
10 Giu 2012
390
0
16
Lavorare con le GD consuma molte risorse, non dovresti mai far generare a PHP le anteprime ogni volta che un utente le richiede per la normale navigazione.

Piuttosto fai si di salvarti l'anteprima generata dalla prima richiesta così che, nelle successive, se disponi del file di cache salvato in precedenza lo mostri senza passare più per le GD.


In ogni caso, la lentezza potrebbe essere frutto anche di una mancata ottimizzazione del database:
  • Le colonne delle tue tabelle hanno valori di dimensionamento appropriati per il dato che devono contenere ? (esempio: se i nickname dei tuoi utenti non possono superare i 20 caratteri non ha senso un varchar(50), se devi archiviare un valore numerico intero molto basso non ha senso un INT(10) e così via
  • Le colonne chiave che sfrutti per la ricerca con le tue query sono indicizzate ?
  • Tra le tue procedure ce ne sono alcune che fanno eseguire delle query all'interno di cicli while/for ?
  • Hai query che realizzano Join fullscan su più tabelle molto voluminose ?

Si il problema non credo sia nel DB perché prima non si è mai presentato. Ma comunque la cosa strana è che dal cpanel non ci sono segnali di sovraccarico. La CPU è sempre bassissima!! Comunque come posso fare in modo da salvare l'immagine creata? Cioè nel file index come salvo l'immagine?

Inviato dal mio Nexus 4 con Tapatalk
 

IImanuII

Utente Attivo
10 Giu 2012
390
0
16
Si il problema non credo sia nel DB perché prima non si è mai presentato. Ma comunque la cosa strana è che dal cpanel non ci sono segnali di sovraccarico. La CPU è sempre bassissima!! Comunque come posso fare in modo da salvare l'immagine creata? Cioè nel file index come salvo l'immagine?

Inviato dal mio Nexus 4 con Tapatalk

Ho fatto delle prove ed il problema è proprio lo script!

Peccato perchè mi è molto comodo. Il problema è che non so come salvare l'immagine jpg creata. Sai come fare?
 

flameseeker

Utente Attivo
27 Nov 2013
699
0
0
Prova così

PHP:
<?php 
#> Nome file nel resize, basta solo questo se "play.png" è statica come variabile, altrimenti concatenala a questa
$resizeFilename = 'video.jpg';
$thumbCache = md5($resizeFilename) . '.jpg';

#> Se l'anteprima esiste già la carico
if (file_exists($thumbCache)){
    header('Content-type: image/jpeg');
    echo file_get_contents($thumbCache);
    die();
}

#> Altrimeni la creo
$site_url='http://'.$_SERVER['SERVER_NAME'].implode("/", explode("/", $_SERVER['PHP_SELF'], -1)).'/'; 

$dest = imagecreatefromjpeg($site_url."resize.php"); 
$src = imagecreatefrompng("play.png"); 

imagecopyresampled($dest, $src, 0, 0, 0, 0, 700, 300, 700, 300);  

header('Content-Type: image/jpeg'); 

#> Salva su file
imagejpeg($dest, $thumbCache); 

#> Output al browser
imagejpeg($dest);

imagedestroy($dest); 
imagedestroy($src); 
?>
 

IImanuII

Utente Attivo
10 Giu 2012
390
0
16
Prova così

PHP:
<?php 
#> Nome file nel resize, basta solo questo se "play.png" è statica come variabile, altrimenti concatenala a questa
$resizeFilename = 'video.jpg';
$thumbCache = md5($resizeFilename) . '.jpg';

#> Se l'anteprima esiste già la carico
if (file_exists($thumbCache)){
    header('Content-type: image/jpeg');
    echo file_get_contents($thumbCache);
    die();
}

#> Altrimeni la creo
$site_url='http://'.$_SERVER['SERVER_NAME'].implode("/", explode("/", $_SERVER['PHP_SELF'], -1)).'/'; 

$dest = imagecreatefromjpeg($site_url."resize.php"); 
$src = imagecreatefrompng("play.png"); 

imagecopyresampled($dest, $src, 0, 0, 0, 0, 700, 300, 700, 300);  

header('Content-Type: image/jpeg'); 

#> Salva su file
imagejpeg($dest, $thumbCache); 

#> Output al browser
imagejpeg($dest);

imagedestroy($dest); 
imagedestroy($src); 
?>

A onor del vero non funziona.

Il codice mi crea un log di questo genere

Codice:
[13-Mar-2014 17:02:20 Europe/Berlin] PHP Warning:  imagejpeg() [<a href='function.imagejpeg'>function.imagejpeg</a>]: Unable to open 'http://youreport.info/video/resized.jpg' for writing: No such file or directory in /home/qjfdlyhb/public_html/video/resize.php on line 22
[13-Mar-2014 17:02:20 Europe/Berlin] PHP Warning:  imagecreatefromjpeg() [<a href='function.imagecreatefromjpeg'>function.imagecreatefromjpeg</a>]: Cannot read image data in /home/qjfdlyhb/public_html/video/crea_anteprima.php on line 16
[13-Mar-2014 17:02:20 Europe/Berlin] PHP Warning:  imagecopyresampled() expects parameter 1 to be resource, boolean given in /home/qjfdlyhb/public_html/video/crea_anteprima.php on line 19
[13-Mar-2014 17:02:20 Europe/Berlin] PHP Warning:  imagejpeg() expects parameter 1 to be resource, boolean given in /home/qjfdlyhb/public_html/video/crea_anteprima.php on line 24
[13-Mar-2014 17:02:20 Europe/Berlin] PHP Warning:  imagejpeg() expects parameter 1 to be resource, boolean given in /home/qjfdlyhb/public_html/video/crea_anteprima.php on line 27
[13-Mar-2014 17:02:20 Europe/Berlin] PHP Warning:  imagedestroy() expects parameter 1 to be resource, boolean given in /home/qjfdlyhb/public_html/video/crea_anteprima.php on line 29

Vorrei adottare una soluzione più spartana arrivati a questo punto:

Poichè ho un pannello admin potrei far così:

1. All'interno del pannello creo un bottone "Crea anteprima immagine"
2. Una volta premuto il bottone questo mi porta su una pagina che dovrebbe:
a. prendere all'interno di una cartella una prima immagine con un nome statico "base.jpg"
b. ridimensionare la "base.jpg" in formato 700x300
c. unire la base.jpg (ridimansionata) con l'immagine "play.png" (che è statica ed ha una trasparenza)
d. salvare l'immagine ultimata in "play.jpg" => dare un messaggio di conferma

Ho provato così ma non va proprio:

PHP:
$site_url='http://'.$_SERVER['SERVER_NAME'].implode("/", explode("/", $_SERVER['PHP_SELF'], -1)).'/';

$filename = 'base.jpg';

############
#  RESIZE  #
############

//nuove dimensioni $attr stampa levecchie
list($width, $height, $type, $attr) = getimagesize($filename);
$newwidth = 700;//$width * $percent;
$newheight = 300;//$height * $percent;

// le carica
$thumb = imagecreatetruecolor($newwidth, $newheight);
$source = imagecreatefromjpeg($filename);

// Le ridimensiona
imagecopyresized($thumb, $source, 0, 0, 0, 0, $newwidth, $newheight, $width, $height);

// Output
// l'immagine sarà di 700x300
imagejpeg($thumb, $site_url.'resized.jpg', 100);

############
#  CREATE  #
############

$dest = imagecreatefromjpeg("resized.jpg");
$src = imagecreatefrompng("play.png");

imagecopyresampled($dest, $src, 0, 0, 0, 0, 700, 300, 700, 300); 

imagejpeg($dest, $site_url.'play.jpg', 100);

// Free memory
//imagedestroy($thumb);
//imagedestroy($dest);
imagedestroy($src);

Cosa sbaglio? perchè non mi crea nessun file ma i log mi danno quest'errore:

Codice:
[13-Mar-2014 17:09:55 Europe/Berlin] PHP Warning:  imagejpeg() [<a href='function.imagejpeg'>function.imagejpeg</a>]: Unable to open 'http://youreport.info/video/resized.jpg' for writing: No such file or directory in /home/qjfdlyhb/public_html/video/play.php on line 24
[13-Mar-2014 17:09:55 Europe/Berlin] PHP Warning:  imagecreatefromjpeg(resized.jpg) [<a href='function.imagecreatefromjpeg'>function.imagecreatefromjpeg</a>]: failed to open stream: No such file or directory in /home/qjfdlyhb/public_html/video/play.php on line 30
[13-Mar-2014 17:09:55 Europe/Berlin] PHP Warning:  imagecopyresampled() expects parameter 1 to be resource, boolean given in /home/qjfdlyhb/public_html/video/play.php on line 33
[13-Mar-2014 17:09:55 Europe/Berlin] PHP Warning:  imagejpeg() expects parameter 1 to be resource, boolean given in /home/qjfdlyhb/public_html/video/play.php on line 35
 

IImanuII

Utente Attivo
10 Giu 2012
390
0
16
Ho risolto così:
PHP:
<?php
$filename = 'video.jpg';

// Content type
header('Content-Type: image/jpeg');

############
#  RESIZE  #
############
// Get new sizes
list($width, $height) = getimagesize($filename);
$newwidth = 700;//$width * $percent;
$newheight = 300;//$height * $percent;

// Load
$thumb = imagecreatetruecolor($newwidth, $newheight);
$source = imagecreatefromjpeg($filename);

// Resize
imagecopyresized($thumb, $source, 0, 0, 0, 0, $newwidth, $newheight, $width, $height);

$save = 'resize.jpg';
// Output and free memory
//the resized image will be 400x300
imagejpeg($thumb, $save, 100) ;

imagedestroy($thumb);

############
#  CREATE  #
############

$dest = imagecreatefromjpeg('resize.jpg');
$src = imagecreatefrompng('play.png');

imagecopyresampled($dest, $src, 0, 0, 0, 0, 700, 300, 700, 300); 

$def = 'play.jpg';

imagejpeg($dest, $def, 100) ;

// Free memory
imagedestroy($dest);
imagedestroy($src);
?>
 
Discussioni simili
Autore Titolo Forum Risposte Data
Gioweb [risolto] Modo migliore per collegare sito esterno al database PHP 4
jwebcode [risolto] oscurare sito PHP 4
D [RISOLTO]domande varie su creazione sito con php, mysql e phpmyadmin PHP 42
L (risolto) MySQL 0
B getElementById su piu id(Risolto) Javascript 7
L Esercitarsi con Js [RISOLTO] Javascript 4
C [RISOLTO]Inserimento variabile php in input html PHP 20
L risolto visualizzazione e ordinamento dati PHP 1
moustache [RISOLTO] SQL PHP IIS PHP 8
Sergio Unia Ricezione email con destinatari multipli [Risolto] PHP 2
L update tabelle in php mysql [risolto] PHP 6
M Semplice visualizzatore di immagini [risolto con plugin wp] PHP 7
L [RISOLTO] Stampa a video risultato count in html PHP 13
L [RISOLTO] Eliminare una discussione creata PHP 3
tomorc [HTML] Problema con scroll bar (risolto) HTML e CSS 0
A [PHP] Problema query insert [RISOLTO] PHP 14
B [PHP] recuperare IP dei server in load balancing [RISOLTO] PHP 3
K [RISOLTO] Problema Griglia Php+Mysql PHP 13
S [RISOLTO] aggiorna tabella da select option asp classic Classic ASP 7
elpirata [RISOLTO][Javascript] Datapicker e autocompletamento campo input Javascript 2
elpirata [RISOLTO][Mysql] Problema insert valori apostrofati MySQL 1
elpirata [RISOLTO][Mysql] Contare le occorrenze in un campo tipo varchar MySQL 2
G [MS Access] Gestione biglietti [RISOLTO] MS Access 2
G [MS Access] Casella combinata & Query [RISOLTO] MS Access 4
G [MS Access] Query mese corrente con conteggio [RISOLTO] MS Access 2
M [RISOLTO]Windows media player non mi funziona più su win 10 pro 64 bit Windows e Software 2
C [RISOLTO][PHP] Errore di sintassi PHP 8
IT9-Gpp [RISOLTO] Leggere variabile restituita da success Ajax 3
Kolop [RISOLTO][PHP] Problema Pagination PHP 2
C [RISOLTO][PHP] Funzione ONclick PHP 14
C [RISOLTO][PHP] Conteggio righe di una tabella PHP 4
N [PHP] Utilizzo variabili di sessione [Risolto] PHP 13
Tommy03 [RISOLTO][PHP] Webserver o devserver? PHP 2
Sergio Unia Recupero dati da una vecchia versione MySql [Risolto] MySQL 4
spider81man [PHP] Problemi cancellazione dato su DB [RISOLTO] PHP 1
A [RISOLTO]Inserimento Immagini da pc a MySql PHP 15
A [PHP] RISOLTO Invio Mail con Tabella PHP 2
felino Risolto - [Wordpress][WooCommerce] PayPal Checkout e campi di fatturazione WordPress 2
elpirata [PHP][RISOLTO] Sommare gli importi estratti da un ciclo while PHP 3
elpirata [PHP][RISOLTO] Effettuare la somma dei tempi di lavorazione PHP 3
elpirata [PHP] [RISOLTO]Sovrascrivere testo in una tabella PHP 2
A [RISOLTO]Recuperare dati inviati con json tramite php PHP 4
C [RISOLTO][PHP] Passaggio variabili senza refresh di pagina PHP 7
elpirata [PHP][RISOLTO] Errore di tipo Notice: Undefined index - Come risolvere quando si hanno tante var PHP 10
S Problema in PHP per invio file XML - RISOLTO- PHP 8
A [Javascript] [RISOLTO] Doppio "submit", in uno stesso "Form" , che puntino ad "action" diversi Javascript 1
marino51 [Risolto]videochat di messenger ha smesso di funzionare sul telefonino Smartphone e tablet 1
A [Javascript] [HTML] RISOLTO...Allungare un box all'apertura della pagina No Mouse over Javascript 9
ken_korn [Javascript][Risolto] browser.tab.Tabs.favIconUrl non funziona Javascript 5
A [RISOLTO] HighChart e PHP PHP 4

Discussioni simili