Prima di tutto volevo scusarmi per il titolo del post, ma proprio non sapevo come esprimere in poche parole il mio problema. Ora ci provo meglio. Sto implementando un album fotografico ed ho il seguente codice, che controlla l'aggiunta di un immagine ad un album
Codice PHP:
/* This function add an image to the album */
function add_image($id, $img_name, $img_tmp_name, $description) {
// Rename img_name
$img = rename_file($img_name); // The renamed file to save in gallery.xml; In upload function
// I pass the img_file that is not renamed; it's renaming in
// upload function
$album_path = db_get_album_path($id);
// Upload image in IMAGES_DIR
if(upload($img_name, $img_tmp_name, PHOTO_GALLERY_DIR.$album_path.'/images/')) {
// Change permission
chmod(PHOTO_GALLERY_DIR.$album_path.'/images/'.$img, 0766);
$doc = DOMDocument::load(PHOTO_GALLERY_DIR.$album_path.'/gallery.xml');
// Get root element
$root = $doc->getElementsByTagName('simpleviewerGallery');
foreach($root as $node) {
//add <image> element to <simpleviewGallery>
$image = $node->appendChild($doc->createElement('image'));
// Add <filename> to<image>
$file_name = $image->appendChild($doc->createElement('filename'));
// Add <filename> text node element to <filename>
$file_name->appendChild($doc->createTextNode($img));
// Add <caption> to<image>
$caption = $image->appendChild($doc->createElement('caption'));
// Add <caption> text node element to <caption>
$caption->appendChild($doc->createTextNode(stripslashes($description)));
// Generate xml
$doc->formatOutput = true; // set the formatOutput attribute of domDocument to true
$doc->saveXML();
// Save as file
$doc->save(PHOTO_GALLERY_DIR.$album_path.'/gallery.xml');
// Resize the image
@pvt_resize_image($album_path, $img) or die('No resize');
//'<script type="text/javascript" src="'.JS_ADMIN_DIR.'photo-gallery/error-add-image.js"></script>');
// Create thumbnail
@pvt_create_thumbnail($album_path, $img) or die('No thumbs');
/*'<script type="text/javascript" src="'.JS_ADMIN_DIR.
'photo-gallery/error-add-image.js"></script>');*/
echo '<script type="text/javascript" src="'.JS_ADMIN_DIR.
'photo-gallery/success-add-image.js"></script>';
}
} else {
echo '<script type="text/javascript" src="'.JS_ADMIN_DIR.
'photo-gallery/error-add-image.js"></script>';
}
}
Come si può notare, interagisco con il file gallery xml di SimpleViewer; comunque, verso la fine della funzione richiamo le funzioni pvt_resize_image() e pvt_create_thumbnail(), con il controllo or die che mi permette di controllare il regolare svolgimento della stessa. Ora quando esegue la funzione pvt_resize_image() mi da errore e quindi entra nel ramo or die, stampando No resize. La cosa strana è che comunque il resize dell'immagine viene eseguito!!! Questo è il codice per il resize, con relativo debug:
Codice PHP:
/* Resize the image */
function pvt_resize_image($album_path, $img) {
// Original image information
list($width, $height, $type, $attr) =
getimagesize(PHOTO_GALLERY_DIR.$album_path.'/images/'.$img);
echo 'Fatto list';
// Creo la versione 480*360 dell'immagine
$thumb = imagecreatetruecolor(480, 360);
echo 'Fatto thumbs';
$source = imagecreatefromjpeg(PHOTO_GALLERY_DIR.$album_path.'/images/'.$img);
echo 'Fatto source';
imagecopyresized($thumb, $source, 0, 0, 0, 0, 480, 360, $width, $height);
echo 'Fatto imageCopyResizw';
// Salvo l'immagine ridimensionata
imagejpeg($thumb, PHOTO_GALLERY_DIR.$album_path.'/images/'.$img, 75);
echo 'Fatto imagejpeg';
}
Tutti gli echo vengono stampati, quindi - se non erro - la funzione viene eseguita completamente senza problemi. Dove può stare l'errore? Possibile che sia sulla funzione che richiamo subito dopo, pvt_create_thumbnail()? Però non ho la stampa di errore No thumbs!!! Anche se la thumbs non viene creata.
Il fatto strano è che questo script, così senza modifiche, funzionava fino a qualche giorno fa, senza essere trasportato su server, ma sempre in locale.
Qualcuno ha qualche idea? Io veramente non so più dove sbattere la testa.
Mi scuso sin d'ora per la mole del post e per una eventuale mancanza di chiarezza
E grazie in anticipo a quanti volessero intervenire per aiutarmi, perchè la situazione è veramente paradossale se non assurda