PHP eseguire un'if una sola volta su pagina con refresh

Linguaggi di programmazione: php, perl, python, C, bash e tutti gli altri.
Scrivi risposta
Avatar utente
gaetanoromeo
Prode Principiante
Messaggi: 48
Iscrizione: domenica 3 maggio 2015, 15:10
Desktop: ubuntu
Distribuzione: 14.04.2 LTS 64bit
Sesso: Maschile
Contatti:

PHP eseguire un'if una sola volta su pagina con refresh

Messaggio da gaetanoromeo »

Salve a tutti!! :D
ho una pagina php che controlla il numero di file presenti in una data cartella e SE questo supera una soglia invia automaticamente una mail.
Il problema è che la pagina in questione presenta un refresh e di conseguenza la condizione viene soddisfatta praticamente ogni 10 secondi...ergo mi riempie la casella di posta.
Come potrei gestire questo problema? cosa posso fare per far ripartire il controllo (l'if in sostanza) solo dopo che ho svuotato la cartella??
Gaetano

EDIT: ah ho pensato che magari può essere più semplice far eseguire l'invio della mail una volta al giorno (sempre se la condizione è soddisfatta)...non lo so...si accettano volentieri altre proposte :D :D
Avatar utente
Zoff
Moderatore Globale
Moderatore Globale
Messaggi: 33338
Iscrizione: mercoledì 10 ottobre 2007, 22:36

Re: PHP eseguire un'if una sola volta su pagina con refresh

Messaggio da Zoff »

Salva in sessione il timestamp dell'ultima notifca inviata e fai quaclosa del genere:

Codice: Seleziona tutto

<?php

session_start();

$controllaFile = true;
if( isset($_SESSION['ultima_notifica'])  ){
    $last = new Datetime();
    $last->setTimestamp($_SESSION['ultima_notifica']);
    $yesterday = new Datetime('NOW -1 DAY');
    if( $last > $yesteday ){
         $controllaFile = false;
    }
}

if( $controllaFile ){
    $send = effettuaControllo();
    if( $send ){
        inviaNotificaViaEmail();
        $_SESSION['ultima_notifica'] = time();
    }
}

//Resto della pagina
Prima di aprire una discussione leggi le Guide, poi vedi se c'è un HowTo nel Wiki e fai una ricerca nel Forum!
Applica semplicemente il [Risolto]! Prova: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=548821
Vuoi qualcosa di piu' dal forum? Prova i miei script: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=597066
Avatar utente
gaetanoromeo
Prode Principiante
Messaggi: 48
Iscrizione: domenica 3 maggio 2015, 15:10
Desktop: ubuntu
Distribuzione: 14.04.2 LTS 64bit
Sesso: Maschile
Contatti:

Re: PHP eseguire un'if una sola volta su pagina con refresh

Messaggio da gaetanoromeo »

Grande!! Grazie per la risposta ma solo adesso ho avuto tempo di provare il codice...
allora (oggi) funziona tutto...però ho un'altro piccolo problema, innanzitutto posto il codice modificato:

Codice: Seleziona tutto

$count=(glob('*.jpeg');
$tot=count($count);
$controllaFile = true;
if( isset($_SESSION['ultima_notifica'])  ){
    $last = new Datetime();
    $last->setTimestamp($_SESSION['ultima_notifica']);
    $yesterday = new Datetime('NOW -1 DAY');
    if( $last > $yesterday ){
         $controllaFile = false;
    }
}

if( $controllaFile ){
    if($tot>=10){?>
	<meta http-equiv="refresh" content="3;url=../mail.php" />
</head>
<body>
<center>
<?php }
        $_SESSION['ultima_notifica'] = time();
    }
else {
echo "</head>
<body>
<center>
<b>Spazio in Esaurimento!</b> Ho gia' inviato una mail di Avviso"; }
?>
Così facendo riesco a stampare un messaggio. Adesso però questo messaggio rimane impresso, suppongo, fino al giorno dopo anche se svuoto la cartella!
Ho pensato di creare un'altra condizione e basarla su un"$_POST", ma la pagina php che si occupa della cancellazione è "invisibile" e reindirizza alla pagina del codice sopra!
Come posso risolvere?!
Avatar utente
Zoff
Moderatore Globale
Moderatore Globale
Messaggi: 33338
Iscrizione: mercoledì 10 ottobre 2007, 22:36

Re: PHP eseguire un'if una sola volta su pagina con refresh

Messaggio da Zoff »

Quindi vuoi comunque effettuare il controllo ma mandare la mail solo una volta al giorno?
Prima di aprire una discussione leggi le Guide, poi vedi se c'è un HowTo nel Wiki e fai una ricerca nel Forum!
Applica semplicemente il [Risolto]! Prova: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=548821
Vuoi qualcosa di piu' dal forum? Prova i miei script: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=597066
Avatar utente
gaetanoromeo
Prode Principiante
Messaggi: 48
Iscrizione: domenica 3 maggio 2015, 15:10
Desktop: ubuntu
Distribuzione: 14.04.2 LTS 64bit
Sesso: Maschile
Contatti:

Re: PHP eseguire un'if una sola volta su pagina con refresh

Messaggio da gaetanoromeo »

scusami ma ho perso il file...l'ho aperto ed era tutto bianco :muro: :muro: :muro: mi sono messo a riscrivere tutto per questo non ho più risposto; comunque l'idea era quella...ma visto che non ho più il codice mi potresti spiegare concettualmente come potrei muovermi?!
Avatar utente
Zoff
Moderatore Globale
Moderatore Globale
Messaggi: 33338
Iscrizione: mercoledì 10 ottobre 2007, 22:36

Re: PHP eseguire un'if una sola volta su pagina con refresh

Messaggio da Zoff »

Prima di aprire una discussione leggi le Guide, poi vedi se c'è un HowTo nel Wiki e fai una ricerca nel Forum!
Applica semplicemente il [Risolto]! Prova: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=548821
Vuoi qualcosa di piu' dal forum? Prova i miei script: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=597066
Avatar utente
gaetanoromeo
Prode Principiante
Messaggi: 48
Iscrizione: domenica 3 maggio 2015, 15:10
Desktop: ubuntu
Distribuzione: 14.04.2 LTS 64bit
Sesso: Maschile
Contatti:

Re: PHP eseguire un'if una sola volta su pagina con refresh

Messaggio da gaetanoromeo »

sisi! ma questa è solo la parte che interessa l'invio della mail...praticamente la "ciliegina sulla torta"...prima di implementare questo codice devo rifare tutto il resto :(
ma comunque...il mio problema può essere risolto modificando soltanto questo spezzone???
Avatar utente
eaghezzi
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 725
Iscrizione: martedì 21 luglio 2009, 10:27
Desktop: Lubuntu
Distribuzione: Ubuntu 14.04.1 LTS i686
Sesso: Maschile
Località: Valleambrosia

Re: PHP eseguire un'if una sola volta su pagina con refresh

Messaggio da eaghezzi »

fai un'analisi precisa di come lo vuoi così è più facile,
io ti consiglerei di fare uno scritp php eseguito a intervalli regolari tramite cron, la logica è la stessa della pagina web e non devi tenere un browser aperto,
e poi è più pulita. hth
Avatar utente
SuperStep
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 2037
Iscrizione: lunedì 19 dicembre 2011, 16:26
Desktop: Unity
Distribuzione: Ubuntu 16.04 LTS x86_64
Sesso: Maschile
Località: Somma Vesuviana (NA)

Re: PHP eseguire un'if una sola volta su pagina con refresh

Messaggio da SuperStep »

ma se la parte che crea file e cartelle, venisse (wrappata) in modo che tu puoi fare determinate operazioni _SOLO_ se non superi il limite?

Mi sembra la scelta piu' saggia.
ubuntu 16.04 LTS 64-bit - Memoria: 31,3 Gib - Processore: Intel Core i7-5960X CPU @ 3.00 GHz × 16 - Grafica: AMD Radeon HD 7800 Series - Disco: SSD 256 GB x 4 (RAID 01)
Avatar utente
eaghezzi
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 725
Iscrizione: martedì 21 luglio 2009, 10:27
Desktop: Lubuntu
Distribuzione: Ubuntu 14.04.1 LTS i686
Sesso: Maschile
Località: Valleambrosia

Re: PHP eseguire un'if una sola volta su pagina con refresh

Messaggio da eaghezzi »

quando non c'è un analisi precisa è così tutte le opinioni sono buone
a questo punto mi immagino due procedure
una pagina per fare upload solo entro il limite

una procedura che manda una mail quando il limite viene superato

se così fosse il refresh sulla pagina è inutile
quando carico la pagina faccio il controllo e non abilito l'up visualizzo un msg
eventualmente mando la mail (questo implica che ogni volta che la pagina viene ricaricata manda la mail) a meno di non fare controlli ...

personalmente il controllo lo farei con uno script separato
Avatar utente
SuperStep
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 2037
Iscrizione: lunedì 19 dicembre 2011, 16:26
Desktop: Unity
Distribuzione: Ubuntu 16.04 LTS x86_64
Sesso: Maschile
Località: Somma Vesuviana (NA)

Re: PHP eseguire un'if una sola volta su pagina con refresh

Messaggio da SuperStep »

ma anche perche' sono un sacco di calcoli inutili quelli legati al controllo costante, sarebbe molto meglio un controllo quando l'operazione viene fatta...

e' un po' come inserire una variabile a caso, e controllare dopo continuamente che questa sia giusta...
ubuntu 16.04 LTS 64-bit - Memoria: 31,3 Gib - Processore: Intel Core i7-5960X CPU @ 3.00 GHz × 16 - Grafica: AMD Radeon HD 7800 Series - Disco: SSD 256 GB x 4 (RAID 01)
Avatar utente
gaetanoromeo
Prode Principiante
Messaggi: 48
Iscrizione: domenica 3 maggio 2015, 15:10
Desktop: ubuntu
Distribuzione: 14.04.2 LTS 64bit
Sesso: Maschile
Contatti:

Re: PHP eseguire un'if una sola volta su pagina con refresh

Messaggio da gaetanoromeo »

:signorsi: ...faccio una descrizione più dettagliata del problema...
tramite un automatismo carico "costantemente" dei file sul server; per evitare che questo si riempia e quindi che smetta di funzionare l'upload vorrei fare in modo che il server invii una mail che mi avverta che lo spazio libero sta per finire.
Inoltre:
1. Vorrei che comparisse un messaggio sulla mia "home.php"!
2. Vorrei fare in modo che all'eliminazione dei file si azzeri tutto...quindi che scompaia il messaggio di avvenuto invio della mail. (i file li elimino da "pulisci.php"che si occupa di svuotare le cartelle).

Ho già provato le seguenti procedure:
1) Ho provato ad inserire nella "home.php" l'invio mail dentro un if...ma ad ogni refresh la condizione è soddisfatta quindi ricevo tante mail. (il refresh mi serve per visualizzare gli ultimi file caricati)
2) Ho adottato la soluzione dell'ottimo zoff, ma si verificano vari problemi, a volte inspiegabili (ad esempio capita che l'invio avviene più volte al giorno se apro e chiudo la pagina)

Comunque la prima proposta di eaghezzi mi sembra la più appropriata al mio scopo...
se ho ben capito (anche al fine di evitare di lasciare la "home.php" sempre aperta), posso creare un file php che si occupi del controllo ed invio mail in "background"(?), gestito da cron (che non sapevo esistesse per php)??

"Spero di essermi capito" :D
e Grazie a tutti!!
Avatar utente
SuperStep
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 2037
Iscrizione: lunedì 19 dicembre 2011, 16:26
Desktop: Unity
Distribuzione: Ubuntu 16.04 LTS x86_64
Sesso: Maschile
Località: Somma Vesuviana (NA)

Re: PHP eseguire un'if una sola volta su pagina con refresh

Messaggio da SuperStep »

non è questo il modo migliore di fare quello che chiedi. Se gli utenti che utilizzano lo spazio usano la propria directory home, puoi assegnare delle quote a quella directory, inoltre sarebbe stato meglio se il disco fosse stato diviso in partizioni in modo che lo spazio degli utenti non precluda quello del sistema,

http://www.yolinux.com/TUTORIALS/LinuxT ... uotas.html
ubuntu 16.04 LTS 64-bit - Memoria: 31,3 Gib - Processore: Intel Core i7-5960X CPU @ 3.00 GHz × 16 - Grafica: AMD Radeon HD 7800 Series - Disco: SSD 256 GB x 4 (RAID 01)
Avatar utente
eaghezzi
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 725
Iscrizione: martedì 21 luglio 2009, 10:27
Desktop: Lubuntu
Distribuzione: Ubuntu 14.04.1 LTS i686
Sesso: Maschile
Località: Valleambrosia

Re: PHP eseguire un'if una sola volta su pagina con refresh

Messaggio da eaghezzi »

doverosa premessa
php può essere eseguito come "pagina web" da apache
ma anche come normale script
senza accorgimenti particolari con php -f <nome file>
se alla prima riga come negli script di shell inserisco
#!/bin/<path php>
lo script viene eseguito da riga di comando cone quelli di shell ./file.php
detto questo l'utilizzo di cron non esiste anche per php
cron lancia uno script nel ns caso /.../file.php

bene detto questo organizzerei così
3 file php
home.php
function.php
checker.php

function.php
contiene la funzione che fa il controllo dello spazio e ritorna T|F

home.php
include function.php
fa il controllo
se il limite è superato visualizza un msg di avviso
se non è superato abilita l'upload

checker.php (lanciato da cron con un intervallo ragionevole)
include function.php
fa il controllo se il limite è superato invia la mail

se vuoi evitare successivi invii di mail banalmente scrivi un file.ini con che contiene un valore di riferimento es un progr o un timestamp

quando ripristini la situazione basta cancellare il file.ini
dico file ini perchè si legge con un'istruzione sola

cmq ha ragione Super Step dovresti usare il quota per il blocco (è fatto apposta per questo)
php per il web e gli script di avviso/gestione
Avatar utente
gaetanoromeo
Prode Principiante
Messaggi: 48
Iscrizione: domenica 3 maggio 2015, 15:10
Desktop: ubuntu
Distribuzione: 14.04.2 LTS 64bit
Sesso: Maschile
Contatti:

Re: PHP eseguire un'if una sola volta su pagina con refresh

Messaggio da gaetanoromeo »

eeehm...ecco cosa non mi torna :shy: ...i file php li ho su un dominio di secondo livello non in locale! quindi non penso si possano eseguire come script...o no??? (per chi ancora non l'avesse capito: sono un mega niubbo :ciao: )

Comunque prendendo spunto da quello che avete detto ho pensato di fare così (se sbaglio mi CORRIGERETE):
- Scrivere su "file.txt" ad esempio un "devi cancellare" quando lo spazio è insufficiente...
- Quindi la pagina home.php controllerà file.txt e mostrerà il messaggio solo se c'è scritto "devi cancellare"! e questo è fatto!
- Per quanto riguarda l'invio della mail invece, potrei risolvere assegnando la data e ora di invio dell'ultima comunicazione ad un'altro txt e SE la data è maggiore di tot ore home.php invierà nuovamente la mail.
- Infine la pagina "pulisci.php" esegue la cancellazione e riscrive il file con..."non fare nulla" (di conseguenza non apparirà il messaggio sulla home.php che non invierà nemmeno la mail).

Anche se troppo macchinoso penso che possa funzionare!

Ma adesso mi avete messo un pallino in testa!!...Esiste un modo per inviare la mail senza lasciare la home.php aperta???
Avatar utente
eaghezzi
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 725
Iscrizione: martedì 21 luglio 2009, 10:27
Desktop: Lubuntu
Distribuzione: Ubuntu 14.04.1 LTS i686
Sesso: Maschile
Località: Valleambrosia

Re: PHP eseguire un'if una sola volta su pagina con refresh

Messaggio da eaghezzi »

quasi quasi mi scappa la voglia
file pippo.php

#!/bin/php
<?php
mail(xxxx);
?>

in locale, in una vps dove vuoi puoi sempre digitare o inserire in cron

/opt/file.pippo.php

e lo script verrà eseguito.
Avatar utente
gaetanoromeo
Prode Principiante
Messaggi: 48
Iscrizione: domenica 3 maggio 2015, 15:10
Desktop: ubuntu
Distribuzione: 14.04.2 LTS 64bit
Sesso: Maschile
Contatti:

Re: PHP eseguire un'if una sola volta su pagina con refresh

Messaggio da gaetanoromeo »

aaah!! okok quindi faccio fare il controllo anche alla pagina che si occupa di inviare la mail!!

comunque ho controllato...il mio hosting provider fornisce il servizio a pagamento (ovviamente :uhm: )
Avatar utente
eaghezzi
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 725
Iscrizione: martedì 21 luglio 2009, 10:27
Desktop: Lubuntu
Distribuzione: Ubuntu 14.04.1 LTS i686
Sesso: Maschile
Località: Valleambrosia

Re: PHP eseguire un'if una sola volta su pagina con refresh

Messaggio da eaghezzi »

pagina ???
Avatar utente
gaetanoromeo
Prode Principiante
Messaggi: 48
Iscrizione: domenica 3 maggio 2015, 15:10
Desktop: ubuntu
Distribuzione: 14.04.2 LTS 64bit
Sesso: Maschile
Contatti:

Re: PHP eseguire un'if una sola volta su pagina con refresh

Messaggio da gaetanoromeo »

:lol: si...è una mail html...ci sono troppe righe perciò ho preferito fare un'alto file
P.S. comunque grazie di tutto!! :)
Scrivi risposta

Ritorna a “Programmazione”

Chi c’è in linea

Visualizzano questa sezione: 0 utenti iscritti e 4 ospiti