Regole del forum
1) Rispettare le idee altrui.
2) Evitare le offese dirette.
3) Leggere attentamente le risposte ricevute
4) Scrivere i messaggi con il colore di default, evitare altri colori.
5) Scrivere in Italiano o in Inglese, se possibile grammaticalmente corretto, evitate stili di scrittura poco chiari, quindi nessuna abbreviazione tipo telegramma o scrittura stile SMS o CHAT.
6) Appena registrati è consigliato presentarsi nel forum dedicato.
La non osservanza delle regole porta a provvedimenti di vari tipo da parte dello staff, in particolare la non osservanza della regola 5 porta alla cancellazione del post e alla segnalazione dell'utente. In caso di recidività l'utente rischia il ban temporaneo.
ciao a tutti!
sono alle prime armi con php e stavo cercando di fare una pagina che passati i parametri 'date' e 'img' aprisse l'immagine richiesta con la possibilità di andare indietro e avanti fra le immagini della directory.
Questo è il codice
<html>
<head>
<title>Prova foto</title>
<script type="text/javascript" src="../java_scripts/popup.js">
</head>
<body>
<?php
/****************************************/
/* Variabili */
/****************************************/
$dir_photos="../photos/";
$thumb_script_link="../thumb/thumb.php";
/****************************************/
/* Funzioni */
/****************************************/
//* restituisce true se il file non è un'immagine *
function fImage($file){
$ext=strtolower(substr($file,-3,3)); //ottiene l'estensione del file
switch ($ext) {
case "jpg": break;
case "peg": break;
case "bmp": break;
case "png": break;
case "gif": break;
case "iff": break;
case "tif": break;
default: return true; //se non è un'immagine da true
}
}
//* estrapolazione data *
function sData($dir) {
$year_n = substr($dir,0,4); //estrapolazione anno
$day_n = substr($dir,6,2); //estrapolazione numero giorno
if (substr($day_n,0,1) == 0){
$day_n=substr($day_n,1,1);
}
$month_n = substr($dir,4,2); //estrapolazione numero mese
switch ($month_n){ //conversione da numero mese a nome mese
case 1: $month="Gennaio"; break;
case 2: $month="Febbraio"; break;
case 3: $month="Marzo"; break;
case 4: $month="Aprile"; break;
case 5: $month="Maggio"; break;
case 6: $month="Giugno"; break;
case 7: $month="Luglio"; break;
case 8: $month="Agosto"; break;
case 9: $month="Settembre"; break;
case 10:$month="Ottobre"; break;
case 11:$month="Novembre"; break;
case 12:$month="Dicembre"; break;
}
return $day_n." ".$month." ".$year_n;
}
/****************************************/
/* Body */
/****************************************/
//* controllo se c'è già una richiesta di data *
if (empty($_GET['date'])) {
$handle=opendir($dir_photos);
while ($dir = readdir($handle)) {
if ((is_dir($dir)) && ($dir != ".") && ($dir != "..")) {
if (empty ($cache)) { $cache = $dir; }
//se no prendi la data ultima (appena si clicca escono le foto più recenti)
elseif ($cache < $dir) { $cache = $dir; }
//aggiungi all'array per la lista di fianco
$elenco_serate[]=sData($dir);
}
}
$dir=$cache."/";
closedir($handle);
} else { $dir = $_GET['date']."/"; } //se c'è già la richiesta di data
echo "date: ".$_GET['date']." img: ".$_GET['img']." dir: ".$dir;
//* echo della lista serate *
foreach ($elenco_serate as $serata){
echo "<div>".$serata."</div>";
}
//* controllo se è stata cliccata un'immagine *
if (!(empty($_GET['img']))){
echo "aaaaaa: ".$dir_photos.$dir;
while ($file = $dir_photos.$dir) {
if (($file != ".") && ($file != "..")) {
/*$counter++;
switch ($counter){
case 1:
$succ=$file;
break;
case 2:
$current=$succ;
$succ=$file;
break;
case 3:
$prev=$current;
$current=$succ;
$succ=$file;
$counter=0;
break;
}
echo $counter;
if ($current == $_GET['img']) {
echo "<table>\n";
echo "<tr>\n";
echo "<td>\n";
echo "</td>\n";
echo "<td>\n";
echo "</td>\n";
echo "<td>\n";
echo "</td>\n";
echo "</tr>\n";
echo "</table>\n";
echo "<a href=\"photos.php?dir=\"".$dir."\"><p>torna indietro</p></a>";
}*/
echo "pippo";
}
}
} else {
//* scrittura html *
$handle = opendir($dir);
echo "handle: ".$handle;
while ($file = readdir($handle)) { //per ogni immagine della directory $dir
if (($file != ".") && ($file != "..")) {
if (!fImage($file)) { //controllo se il file è immagine
echo "<a href=\"";
echo "./".$dir.$file;
echo "\" onclick=\"PrevFoto('".$dir.$file."');return(false)\">";
echo "<img src=\"".$thumb_script_link."?img="."./".$dir_photos.$dir.$file."\">";
//aggiungerci height alt ecc
echo "</a>\n<br>\n";
}
}
}
}
?>
</body>
</html>
non sono un esperto ma credo che il problema reale sia l'accesso dei dati a /thumb/thumb.php che per qualche ragione impiega + del previsto. Controllerei anche quel file. La mia supposizione parte dal fatto che i rallentamenti sono quasi sempre dovuti a database o file di database.
Saluti, e scusa se ho detto una cavolata.
Poi non credo che inserire una pagina php in una con body html sia una cosa esatta...di solito c'è la pagina con il codice php, una di estensione .tpl con il codice html e la terza che richiama le due pagine...la cosa è un pò + complessa ma + funzionante.
capitanfuturo ha scritto:scusami ma se non dai nessun parametro funziona?
sìsì, funziona.
per il thumb.php... cioè: sì è un po' lento ma non è quello: l'ho commentato e non va comunque, mentre se commento la parte che fa i cicli per $succ, $current e $prev lo script funziona.
bho...
che significa di non prendere in considerazione i file che seguono. Quindi Tu hai usato un "case" 1-2-3...se non deve prenderli in considerazione ma poi nel resto del codice si la CPU non sa più dove sbattere la testa...editando il codice mi sembra ovvio che funge. Meglio cancellarlo.
Comunque, secondo me, quel codice andrebbe alleggerito e di molto.
Ad esempio, al posto degli switch-case, puoi usare benissimo degli array e negli if, puoi evitare le tonde per ogni condizione.
Ciao,
nino
ninobi ha scritto:Comunque, secondo me, quel codice andrebbe alleggerito e di molto.
Ad esempio, al posto degli switch-case, puoi usare benissimo degli array e negli if, puoi evitare le tonde per ogni condizione.
Ciao,
nino
ho modificato il codice e ora funzione tutto a meraviglia (è anche diventato mooolto più veloce).
Se vi va, se avete voglia, se non avete niente di meglio da fare magari dateci un'occhiata: http://pastebin.ca/209963 . se avete un consiglio su come migliorare o alleggerire il codice, o qualsiasi cosa per migliorare la chiarezza tipo i commenti, o il nome delle variabili, la posizione delle funzioni, l'indentatura... sto facendo i primi passi e, imparando dai grandi , vorrei incominciare col piede giusto.
prova a vedere se funziona così, comunque dovrebbe essere piuttosto a posto
ciao... grazie per i consigli ma non li capisco!!! cioè... il primo okay, ma gli altri due no. cosa vuol dire difendiamoci dai furbi? e togliere i path relativi?
le "seconde" modifiche sono per evitare che chi chiama lo script passi al posto dei dati "puliti" qualcosa che possa andare a leggere fuori dai percorsi da te voluti i usando combinazioni di .. e /
esempio: al posto di img=file.jpg potrebbero usare ../../altrofile.txt , andando quindi fuori dai binari da te voluti