problema: la funzione funziona (scusate ill gioco di parole) ma mi da errore time out

paperinik4

Utente Attivo
29 Mag 2011
1.811
0
36
Roma
www.ricetteagogo.it
Salve a tutti,

Forse sono riuscito a venire a capo della mattassa con la lettura dei dvd. Mi hanno dato questa funzione qua ma purtroppo mi va in time out quando legge alcuni dvd pieni come un uovo o quando legge l'hard-disk. Questo è il codice:


PHP:
<!DOCTYPE html>

<html>
    <head>
        <meta charset="UTF-8">
        <title></title>
    </head>
    <body>
    
        <form action= '' method="POST">

            
       <!-- Contenuto: <textarea name="contenuto" rows="5" cols="40"> -->

        <?php

function listafiles($directory='')
{    
    //$directory.'*.sorgente' es $directory.'*.php' == mostrerà tutti i file php
    //$directory.'*.sorgente' es $directory.'*.avi' == mostrerà tutti i file avi
    
       
        foreach(glob($directory.'*.*') as $file) //elenco tutti i file della directory
        echo '<br>'.$file;
    
    foreach(glob($directory.'*', GLOB_ONLYDIR | GLOB_MARK) as $cartella) //per ogni cartella di $directory, richiamo la funzione passando la cartella
        if($cartella != './' && $cartella != '../') //non teniamo conto di ./ altrimenti va in loop infinito, e ../ altrimenti torna anche indietro!
            listafiles($cartella);
}

if(!empty($_POST)){
            
        $query="INSERT INTO arcdvd (contenuto) VALUES ('".$contenuto."')";
        @mysql_query($query) or die("Errore query Database riga: ".__LINE__  . mysql_error());
        echo '<div id="risultato">Dati inseriti correttamente nel db</div>';
        }
listafiles('c:\\');//la tua directory iniziale (in questo caso è il mio disco rigido
?>
            
            <div align ="center">
                <p> <p>
    <input type="submit" value="Invia" name="memo">
</p> </p>
            </div>
</form>
        </textarea>
    </body>
</html>

Fatal error: Maximum execution time of 30 seconds exceeded in C:\xampp\htdocs\Archdvd2\provevarieletturadvd.php on line 26

La riga 26 dovrebbe essere la seguente:


Codice:
foreach(glob($directory.'*', GLOB_ONLYDIR | GLOB_MARK) as $cartella) //per ogni cartella di $directory, richiamo la funzione passando la cartella
        if($cartella != './' && $cartella != '../') //non teniamo conto di ./ altrimenti va in loop infinito, e ../ altrimenti torna anche indietro!
            listafiles($cartella);
}

esattamente dove c'è GLOB_ONLYDIR | GLOB_MARK. Qualche anima pia mi potrebbe risolvere il problema per favore ???? Sono mesi che ci sto combattendo ma senza ottenere un grosso risultato grazie. Ho fiducia in voi.
 
Ciao, l'errore 500 o time out avviene quando l'esecuzione di un programma supera il tempo impostato nel server. Per risolvere bisogna modificare i parametri nel server stesso. Lavorando in locale, come vedo dall'errore, devi cambiare le righe del file php.ini (situato nella cartella /xampp o /lampp) da: max_execution_time = 30 a max_execution_time = 60 (o il tempo che vuoi).
Ciao
 
come memorizzare il contenuto letto del dvd

Ciao filomeni,

Grazie di avermi risposto. Il problema sono riuscito a risolvero proprio come mi aavevi consigliato te di allungare il tempo. L'ho messo a 50 sec. in modo tale che mi legge tutti i dvd, l'unica cosa è l'hard disk che c'impiega più tempo. Ma quello poco importa alla fine. Ora il problema è come memorizzare i dati che non sono riuscito a risolvere. Mi lascia sempre la colonna vuota. Queste sono le tre tabelle di proba che ho fatto:

tabelle arc2, arc3, arc4:


PHP:
reate table arcdvd2 (

iddvd 		INT NOT NULL AUTO_INCREMENT,
titolodvd 	VARCHAR(80) NOT NULL,
listafiles	VARCHAR(255) NOT NULL,
PRIMARY KEY (iddvd)
);
 */
 
/* Terza tabella modificata
  
 create table arcdvd2 (

iddvd 		INT NOT NULL AUTO_INCREMENT,
titolodvd 	VARCHAR(80) NOT NULL,
cartella	VARCHAR(255) NOT NULL,
PRIMARY KEY (iddvd)
);
 */
/* Quarta tabella modificata
  
 create table arcdvd2 (

iddvd 		INT NOT NULL AUTO_INCREMENT,
titolodvd 	VARCHAR(80) NOT NULL,
cartella	VARCHAR(255) NOT NULL,
PRIMARY KEY (iddvd)
);
 */

E questo è l'intero listato che mi legge i dvd:


letturadvd.php


PHP:
<html>
    <head>
        <meta charset="UTF-8">
        <title></title>
    </head>
    <body>

                <form action= '' method="POST">

    <?php
  
 require_once "connetticonxampp.php";
    function listafiles($directory='')
{    
    //$directory.'*.sorgente' es $directory.'*.php' == mostrerà tutti i file php
    //$directory.'*.sorgente' es $directory.'*.avi' == mostrerà tutti i file avi
    set_time_limit(50);
    
    foreach(glob($directory.'*.*') as $file) //elenco tutti i file della directory
        echo '<br>'.$file;
    
    foreach(glob($directory.'*', GLOB_ONLYDIR | GLOB_MARK) as $cartella) //per ogni cartella di $directory, richiamo la funzione passando la cartella
        if($cartella != './' && $cartella != '../') //non teniamo conto di ./ altrimenti va in loop infinito, e ../ altrimenti torna anche indietro!
            listafiles($cartella);
    
}

 echo '<textarea rows="4" cols="50">';

listafiles('e:\\');//la tua directory iniziale

echo "</textarea>";

$titolodvd = $_GET['titolodvd'];
$cartella = $_GET['cartella'];   

if(!empty($_POST)){
$query=("INSERT INTO arcdvd2 (titolodvd, cartella) VALUES('".$titolodvd."','".$cartella."')");
$result=@mysql_query($query) or die("Error query DataBase:".mysql_error());

if($result){
    echo("<p> Inserimento avvenuto correttamente <p>");
} else{
    echo("<br>Inserimento non eseguito");
}
}

        ?>
    
                       <div align ="center">
                <p> <p>
    <input type="submit" value="Invia" name="memo">
</p> </p>
            </div>
                </form>
    </body>
</html>

Dove sbaglio ??? Perchè non mi memorizza niente ???? Spero che mi potrai risolvere questo problema. Grazie.
 
Allora l'html è scolegato dalla pagina php eprchè deve stare tutto in un file php. Gli input uno ne manca ossia il titolodvd, però l'altro è la textarea che legge direttamente il contenuto dvd. Secondo te come dovrei fare ???? Per il get e post sono d'accordo con te mi hnanno dato un'indicazione. Ora ho bisogno che il contentuo della textarea venga memorizzato nel db. Il contenuto lo prende dalla lettura del dvd.

Questo è il listato corretto:

PHP:
<html>
    <head>
        <meta charset="UTF-8">
        <title></title>
    </head>
    <body>

                <form action= '' method="POST">

    <?php
  
 require_once "connetticonxampp.php";
    function listafiles($directory='')
{    
    //$directory.'*.sorgente' es $directory.'*.php' == mostrerà tutti i file php
    //$directory.'*.sorgente' es $directory.'*.avi' == mostrerà tutti i file avi
    set_time_limit(50);
    
    foreach(glob($directory.'*.*') as $file) //elenco tutti i file della directory
        echo '<br>'.$file;
    
    foreach(glob($directory.'*', GLOB_ONLYDIR | GLOB_MARK) as $cartella) //per ogni cartella di $directory, richiamo la funzione passando la cartella
        if($cartella != './' && $cartella != '../') //non teniamo conto di ./ altrimenti va in loop infinito, e ../ altrimenti torna anche indietro!
            listafiles($cartella);
    
}

 echo '<textarea rows="4" cols="50">';

listafiles('e:\\');//la tua directory iniziale

echo "</textarea>";

$titolodvd = $_POST['titolodvd'];
$cartella = $_POST['cartella'];   

if(!empty($_POST)){
$query=("INSERT INTO arcdvd2 (titolodvd, cartella) VALUES('".$titolodvd."','".$cartella."')");
$result=@mysql_query($query) or die("Error query DataBase:".mysql_error());

if($result){
    echo("<p> Inserimento avvenuto correttamente <p>");
} else{
    echo("<br>Inserimento non eseguito");
}
}

        ?>
    
                       <div align ="center">
                <p> <p>
    <input type="submit" value="Invia" name="memo">
</p> </p>
            </div>
                </form>
    </body>
</html>

Qui sotto ti allego l'immagine di ciò che dovrebbe memorizzare eche non memorizza. Le righe in questine dove c'è l'errore sono le seguenti:

Codice:
$titolodvd = $_POST['titolodvd'];
$cartella = $_POST['cartella'];

Come posso risolvere il problema una volta per tutte ???
 

Allegati

  • Contenutodvd.PNG
    Contenutodvd.PNG
    25,2 KB · Visite: 262
Ultima modifica:
Ciao, il "NOTICE" non è un errore vero e proprio, ma notifica nu'inesattezza nel codice. Questo solitamente si verifica dopo un GET o Un POST, per risovere potresti provare a verificare l'esistenza della variabile:
Codice:
// Prima dell'utilizzo $_POST['variabile'] 
if (isset($_POST['variabile'])) 
{ 
          // Istruzioni se $_POST['variabile'] esiste 
}
 

Discussioni simili