Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it
    Registrato dal
    Nov 2001
    Messaggi
    30

    [php]Fatal error: Allowed memory size of 20971520 bytes exhausted

    ciao a tutti:

    il problema:su un sito devo gestire l'aggiornamento automatico del database e specificatamente di una tabella dei titoli di film.
    il file di origine(del cliente) è un mdb.
    il procedimento che ho utilizzato è questo:
    1) faccio creare un csv da access dei dati da aggiornare
    2) da una amministrazione in php, uploado il file, lo leggo con fgetcsv(), ne metto il contentuo in un array che registro in sessione
    3) leggo l'array a cicli di 250 per volta ed effettuo le query di aggiornamento sulla tabella del Database mysql.

    il dscorso dei cicli e della sessione l'ho fatto per evitare di far effettuare l'aggiornamento in una botta sola (non ci riesce nemmeno in locale)...

    il problema è che mi va fuori di memoria, anche se il file csv è di 3 mb

    qualcuno mi sa dare una soluzione alterantiva?

    grazie 1000!

  2. #2
    Utente di HTML.it L'avatar di kuarl
    Registrato dal
    Oct 2001
    Messaggi
    1,093
    dipende dal codice che hai scritto... posta il codice

  3. #3
    Utente di HTML.it
    Registrato dal
    Nov 2001
    Messaggi
    30
    ok questo è il codice della pagina:

    ------------------------------------------------------
    <?php
    include_once('login.php');
    include_once('DB_lib_mysql.php');
    include_once('oggetti_M.php');
    include_once('file_writer.php');

    //////////////////////////////////////////////////////////////////
    // gonfigurazioni generali
    //////////////////////////////////////////////////////////////////
    $table_name='new_film'; //nome della tabella (ovvio)
    //$LIMIT=10; //numero di righe per paginata
    //$max_pag=5; //numero di pagine raggiungibili direttamente
    //$dir_file="aggiornamenti/";
    //$nome_file="aggiornamenti.csv";

    if(isset($_GET)){
    while( list($key,$value)=each($_GET)) {
    ${$key} = $value;
    }}
    elseif(isset($_POST)){
    while( list($key,$value)=each($_POST)) {
    ${$key} = $value;
    }}
    $step=250;//numero di esecuzioni di query per volta



    //funzione per creare la query
    function crea_query($inADati,$inTabella,$inID){
    $sql=$inTabella." SET ";
    foreach($inADati as $i => $v){
    if($i=="id_"){
    //$sql.= $i." = '".$inID."', ";
    }elseif($i=="foto_1"){
    $sql.= $i." = '".$v.".jpg', ";
    }else{
    $sql.= $i." = '".$v."', ";
    }
    }
    $outSql = substr(trim($sql),0, -1);
    return $outSql;
    }
    function norm_date($num){
    settype($num,'integer');
    if ( $num < 10 ){
    return '0'.$num;
    } else {
    return $num;
    }
    }
    function aggiustaData($inData){//25/5/1997 0.00.00
    if(empty($inData)) return '0000-00-00';
    //$inData=cl_in($inData);
    $aData=explode(' ',$inData);
    $tmpData=str_replace("/","-",$aData[0]);
    //
    list($d,$m,$y)=explode('-',$tmpData);
    $sql_date = $y.'-'.norm_date($m).'-'.norm_date($d);
    return $sql_date;

    }
    $mex="";
    $messaggio="";
    $dir_file="../aggiornamenti/";
    $nome_file="aggiorna.csv";//Titoli.csv.bz2
    ///*salvo il file in una cartella apposita per potervi accedere di volta in volta*/
    if($azione=="edita"){
    if (is_uploaded_file($_FILES['userfile']['tmp_name'])){
    if(substr($_FILES['userfile']['name'],-3)=="csv"){
    //provo uploadando ilfile prima di leggerlo
    move_uploaded_file($_FILES['userfile']['tmp_name'], $dir_file.$nome_file);
    //carico l'array dei dati una volta sola e lo sistemo in sessione
    /*
    $bz = bzopen($dir_file.$nome_file, "r");
    $str = bzread($bz,15000);
    bzclose($bz);
    die( $str );
    */




    $fp = fopen ($dir_file.$nome_file,"r");//$_FILES['userfile']['tmp_name']
    $k=0;
    while ($data[$k] = fgetcsv ($fp, 1000, ";")){ //lenght (1000) deve essere maggiore della riga più lunga compresi i caratteri di new line
    $k++;
    }
    fclose($fp);
    for ($i=0; $i < count($data);$i++){
    $aAggDati[$i]['id_']='';//id_
    $aAggDati[$i]['vistoCensura']=trim($data[$i][0]);//visto censura
    $aAggDati[$i]['titolo']=trim(cl_in($data[$i][1]));
    $aAggDati[$i]['regista']=trim(cl_in($data[$i][5]))." ".trim(cl_in($data[$i][4]));
    $sqlGen="select id_, genere from generi where enable='1' and id_='".trim($data[$i][12])."'";
    $rsGenere=mysql_query($sqlGen);

    while($aGeneri=mysql_fetch_array($rsGenere)){
    $aGenSel[]=$aGeneri;
    }
    if(mysql_num_rows($rsGenere)!=0){
    $aAggDati[$i]['genere']=$aGenSel[0]['genere'];//trim($data[$i][12]); //genere
    }else{
    $aAggDati[$i]['genere']='';
    }
    $aAggDati[$i]['subgenere']='';//trim($data[$i][13]); //sottogenere
    $aAggDati[$i]['anno']=trim($data[$i][10]);
    $aAggDati[$i]['attori']=trim(cl_in($data[$i][7]))." ".trim(cl_in($data[$i][6])).",".trim(cl_in($data[$i][9]))." ".trim(cl_in($data[$i][8]));
    $aAggDati[$i]['foto_1']=trim($data[$i][16]);//foto???
    $aAggDati[$i]['formato']='';//trim($data[$i][20]); //formato
    $aAggDati[$i]['durata']=(int)trim($data[$i][11]);
    $aAggDati[$i]['uscita']=trim(aggiustaData($data[$i][25]));
    $aAggDati[$i]['novita']=trim(aggiustaData($data[$i][26]));
    $aAggDati[$i]['pubblic']=trim(aggiustaData($data[$i][27]));
    $aAggDati[$i]['enable']='1';//enable
    $aAggDati[$i]['trama']=trim(cl_in($data[$i][17]));
    $aAggDati[$i]['casa_distribuzione']=trim(cl_in($data[$i][3]));
    $aAggDati[$i]['copie_disp']=trim($data[$i][30]);
    $aAggDati[$i]['prezzo']='0.00';//prezzo
    $aAggDati[$i]['sconto_']='0';//sconto
    $aAggDati[$i]['data_inizio_sconto']='0000-00-00';
    $aAggDati[$i]['data_fine_sconto']='0000-00-00';
    $aAggDati[$i]['noleggio']='0';
    $aAggDati[$i]['usato']='0';
    $aAggDati[$i]['offerta']='0';
    $aAggDati[$i]['data_reg']=date("Y-m-d",time());
    }

    $_SESSION['aAggDati']=$aAggDati;
    $controllo="ok";
    $contoDati=count($aAggDati);
    }else{
    $mex= "il file upoadato non ha estensione corretta!
    Il file deve avere estensione .csv.";
    }
    }else{
    if($bloccoAttuale==0){
    $mex= "nessun file da uploadare!";
    }
    }//fine file uploadato
    //print_r($aAggDati);
    if($controllo=="ok"){
    if(isset($_SESSION['aAggDati'])){
    $aAggDati=$_SESSION['aAggDati'];
    $contoDati=count($aAggDati);
    $nCicli= (isset($_GET['nCicli']))?($_GET['nCicli'])ceil($contoDati / $step));
    $bloccoAttuale=(isset($_GET['bloccoAttuale']))?($_GET['bloccoAttuale'])0);

    //foreach($aAggDati as $i => $v){
    for($i=0 + ($bloccoAttuale * $step); $i < $step * ($bloccoAttuale + 1); $i++){
    if($i==$contodati - 1){
    break;
    }
    $sql_visto="select vistoCensura from $table_name where vistoCensura='".$aAggDati[$i]['vistoCensura']."'";
    //echo "
    ".$sql_visto."

    ";//dbg
    if(mysql_num_rows(mysql_query($sql_visto))==0){
    $sqlDidabled="SELECT id_, enable FROM $table_name WHERE enable = '0' LIMIT 0,1";
    $disabled_id=mysql_query($sqlDidabled);
    //echo "
    $sqlDisabled
    ";//dbg
    if(mysql_num_rows($disabled_id)>0){
    while($id=mysql_fetch_array($disabled_id)){
    $id_=$id['id_'];}
    $sql_modifi="UPDATE ".crea_query($aAggDati[$i],$table_name,$id_)." WHERE id_ ='".$id_."'";
    }
    else{
    $sql_modifi="INSERT INTO ".crea_query($aAggDati[$i],$table_name,'');
    }

    //echo $sql_modifi."
    ";//dbg
    mysql_query($sql_modifi) or die(__LINE__.' '.mysql_error().$sql_modifi);
    }//end if visto c'è
    //break;//un solo for
    }//end for
    //aggiorno il file con la data dell'ultimo upload
    $pnt_f1=@fopen("ultimo_aggiornamento.txt","wb");
    $cnt_f=fwrite($pnt_f1,date("Y-m-d",time()));//scrittura del nuovo dato attivare
    fclose($pnt_f1);

    $bloccoAttuale++;
    if($bloccoAttuale < $nCicli){
    $messaggio="<a href=\"".$_SERVER[PHP_SELF]."?bloccoAttuale=".$bloccoAttuale."&azione=edita&c ontrollo=ok\" style=\"color:#ff6300\">[prosegui]</a>";
    }

    if($bloccoAttuale == $nCicli){
    $sqlRipara="select id_ from $table_name where vistoCensura=''";
    //echo $sqlRipara;//dbg
    $rsRipara=mysql_query($sqlRipara);
    while($aRipara= mysql_fetch_array($rsRipara)){
    $sqlUp="UPDATE $table_name SET enable='0' where id_='".$aRipara['id_']."'";
    mysql_query($sqlUp);
    }
    $_SESSION['aAggDati']=array();
    }




    }//end if controllo
    }//end if isset sessione
    }//fine azione edita

    ?>
    <html><head>
    <script language='Javascript1.2'>
    <!--
    var dest="";
    var step=0;
    var wiz=false;
    var F;

    function init(){
    F=document.forms[0];
    }
    /*//dava errore di apache di file non trovato!
    _editor_url = '../common/js/htmlarea/';
    var win_ie_ver = parseFloat(navigator.appVersion.split("MSIE")[1]);
    if (navigator.userAgent.indexOf('Mac') >= 0) { win_ie_ver = 0; }
    if (navigator.userAgent.indexOf('Windows CE') >= 0) { win_ie_ver = 0; }
    if (navigator.userAgent.indexOf('Opera') >= 0) { win_ie_ver = 0; }
    if (win_ie_ver >= 5.5) {
    document.write('<scr' + 'ipt src="' +_editor_url+ 'editor.js"');
    document.write(' language="Javascript1.2"></scr' + 'ipt>');
    } else {
    document.write('<scr'+'ipt>function editor_generate() { return false; }</scr'+'ipt>');
    }
    */


    // -->
    </script>
    <script language="JavaScript" src="img_gest/rows.js"></script>
    <title> :: Amministrazione di Onewayonline.it [ Gestione degli Aggiornamenti ] :: </title>
    <script src='dyn_calendar/browserSniffer.js'></script>
    <script src='dyn_calendar/dynCalendar.js'></script>
    <link href='dyn_calendar/dynCalendar.css' rel='stylesheet' type="text/css">
    <link href="../graphics/basic.css" rel="stylesheet" type="text/css">
    </head>

    <body onload="init()" onunload="iavascript:if(dest)dest.close();">


    <?php
    echo table(tr(th('Gestione degli Aggiornamenti','',10)).tr(td('','',10)).
    tr(th(' [ gest. titoli ] ').th(' [ gest. usato ] ').th(' [ gest. offerte ] ').th(' [ gest. generi ] ').th(' [ gest. formati ] ').th(' [ gest. clienti ] ').th(' [ gest. banner ] ')).tr(td('','',10)).
    tr(td('<font color="#ffffff"> :costi spedizione: </font>','','','','center').td('<font color="#ffffff"> :dati Banca Sella:</font>[b]','','','','center').
    td('<font color="#ffffff"> :storico ordini: </font>','','','','center').
    td('<font color="#ffffff"> :gestione OTP RIC: </font>','','','','center').td('<font color="#ffffff"> :gestione OTP RIS: </font>','','','','center').
    td('<font color="#ffffff"> :gestione OTP RIS: </font>','','','','center').td('<font color="#ffffff">:aggiornamenti:</font> ','','','','center').
    td('<font color="#ffffff"></font>','','','','center'),'bgcolor="#5D7085"').tr(td('' ,'',10)));


    //$alb_row=mysql_fetch_assoc($tot_parz);
    //$img=($alb_row['foto_1']!='')?($alb_row['foto_1'])'nonfoto.gif');

    echo '<form method="post" enctype="multipart/form-data" action="'.$PHP_SELF.'">'.input('hidden','azione',' edita');
    echo "<center>$mex
    elaborazione: numero di record=$contoDati --- numero cicli=$nCicli --- ciclo attuale=$bloccoAttuale </center>
    ";
    echo table(tr(th('Gestione degli Aggiornamenti'))).table(
    tr(th('inserisci file Aggiornamenti (.csv)').td(input('file','userfile','').''.$messag gio)));
    if($bloccoAttuale==0){
    echo table(tr(th('','','3')).
    tr(td(input('submit','','Registra dati','','',''),'','','','center')).tr(th('','','3 ')));
    }
    echo '</form>';

    echo table(tr(th(input('button','','abbandona','','','o nclick="window.close()"').input('hidden','session_ auth',session_id()).'</form>')));

    ?>

    </body></html>
    <?php
    mysql_close();
    ?>

  4. #4
    Utente di HTML.it
    Registrato dal
    Nov 2001
    Messaggi
    30
    mi è venuta qualche faccina di troppo: scusa

  5. #5
    Utente di HTML.it L'avatar di kuarl
    Registrato dal
    Oct 2001
    Messaggi
    1,093
    oh mamma... si capisce poko, posta solo il codice relativo all'inserimento dei dati nel database e formattalo please, usa il tag PHP che trovi negli strumenti di formattazione in alto

  6. #6
    Utente di HTML.it
    Registrato dal
    Nov 2001
    Messaggi
    30
    scusa: ora riprovo.

    ---------------------------------------------------------------

    //////////////////////////////////////////////////////////////////
    // gonfigurazioni generali
    //////////////////////////////////////////////////////////////////
    Codice PHP:
    $table_name='new_film'
    Codice PHP:
    $step=250;//numero di esecuzioni di query per volta 
    Codice PHP:
    if($azione=="edita"){
    if (
    is_uploaded_file($_FILES['userfile']['tmp_name'])){
    if(
    substr($_FILES['userfile']['name'],-3)=="csv"){
    move_uploaded_file($_FILES['userfile']['tmp_name'], $dir_file.$nome_file);

    $fp fopen ($dir_file.$nome_file,"r");//$_FILES['userfile']['tmp_name']
    $k=0;
    while (
    $data[$k] = fgetcsv ($fp1000";")){ 
    $k++;
    }    
    fclose($fp);
    for (
    $i=0$i count($data);$i++){
    $aAggDati[$i]['id_']='';//id_
    $aAggDati[$i]['vistoCensura']=trim($data[$i][0]);//visto censura
    $aAggDati[$i]['titolo']=trim(cl_in($data[$i][1]));
    $aAggDati[$i]['regista']=trim(cl_in($data[$i][5]))." ".trim(cl_in($data[$i][4]));    
    $sqlGen="select id_, genere from generi where enable='1' and id_='".trim($data[$i][12])."'";
    $rsGenere=mysql_query($sqlGen);

    while(
    $aGeneri=mysql_fetch_array($rsGenere)){
    $aGenSel[]=$aGeneri;
    }
    if(
    mysql_num_rows($rsGenere)!=0){
    $aAggDati[$i]['genere']=$aGenSel[0]['genere'];//trim($data[$i][12]);
    }else{
    $aAggDati[$i]['genere']='';
    }
    $aAggDati[$i]['subgenere']='';//trim($data[$i][13]);
    $aAggDati[$i]['anno']=trim($data[$i][10]);
    $aAggDati[$i]['attori']=trim(cl_in($data[$i][7]))." ".trim(cl_in($data[$i][6])).",".trim(cl_in($data[$i][9]))." ".trim(cl_in($data[$i][8]));      
    $aAggDati[$i]['foto_1']=trim($data[$i][16]);
    $aAggDati[$i]['formato']='';
    $aAggDati[$i]['durata']=(int)trim($data[$i][11]);
    $aAggDati[$i]['uscita']=trim(aggiustaData($data[$i][25]));
    $aAggDati[$i]['novita']=trim(aggiustaData($data[$i][26]));
    $aAggDati[$i]['pubblic']=trim(aggiustaData($data[$i][27]));
    $aAggDati[$i]['enable']='1';//enable
    $aAggDati[$i]['trama']=trim(cl_in($data[$i][17]));
    $aAggDati[$i]['casa_distribuzione']=trim(cl_in($data[$i][3]));
    $aAggDati[$i]['copie_disp']=trim($data[$i][30]);
    $aAggDati[$i]['prezzo']='0.00';//prezzo
    $aAggDati[$i]['sconto_']='0';//sconto
    $aAggDati[$i]['data_inizio_sconto']='0000-00-00';
    $aAggDati[$i]['data_fine_sconto']='0000-00-00';
    $aAggDati[$i]['noleggio']='0';
    $aAggDati[$i]['usato']='0';
    $aAggDati[$i]['offerta']='0';
    $aAggDati[$i]['data_reg']=date("Y-m-d",time());        
    }

    $_SESSION['aAggDati']=$aAggDati;
    $controllo="ok";    
    $contoDati=count($aAggDati);
    }else{
    $mex"il file upoadato non ha estensione corretta!
    Il file deve avere estensione .csv."
    ;
    }
    }else{
    if(
    $bloccoAttuale==0){
    $mex"nessun file da uploadare!";
    }
    }
    //fine file uploadato

    if($controllo=="ok"){
    if(isset(
    $_SESSION['aAggDati'])){
    $aAggDati=$_SESSION['aAggDati'];    
    $contoDati=count($aAggDati);
    $nCicli=(isset($_GET['nCicli']))?($_GET['nCicli']):(ceil($contoDati $step));
    $bloccoAttuale=(isset($_GET['bloccoAttuale']))?($_GET['bloccoAttuale']):(0);    


    for(
    $i=+ ($bloccoAttuale $step); $i $step * ($bloccoAttuale 1); $i++){
    if(
    $i==$contodati 1){
    break;        
    }
    $sql_visto="select vistoCensura from $table_name where vistoCensura='".$aAggDati[$i]['vistoCensura']."'";
    if(
    mysql_num_rows(mysql_query($sql_visto))==0){
    $sqlDidabled="SELECT id_, enable FROM $table_name WHERE enable = '0' LIMIT 0,1";
    $disabled_id=mysql_query($sqlDidabled);
    if(
    mysql_num_rows($disabled_id)>0){
    while(
    $id=mysql_fetch_array($disabled_id)){
    $id_=$id['id_'];}
    $sql_modifi="UPDATE ".crea_query($aAggDati[$i],$table_name,$id_)." WHERE id_ ='".$id_."'";
    }
    else{
    $sql_modifi="INSERT INTO ".crea_query($aAggDati[$i],$table_name,'');
    }
    mysql_query($sql_modifi) or die(__LINE__.' '.mysql_error().$sql_modifi);        
    }
    //end if visto c'è

    }//end for
    //aggiorno il file con la data dell'ultimo upload
    $pnt_f1=@fopen("ultimo_aggiornamento.txt","wb");
    $cnt_f=fwrite($pnt_f1,date("Y-m-d",time()));//scrittura del nuovo dato  attivare
    fclose($pnt_f1);        
        
    $bloccoAttuale++;
    if(
    $bloccoAttuale $nCicli){
    $messaggio="<a href=\"".$_SERVER[PHP_SELF]."?bloccoAttuale=".$bloccoAttuale."&azione=edita&controllo=ok\" style=\"color:#ff6300\">[b][prosegui][/b]</a>";
    }

    if(
    $bloccoAttuale == $nCicli){
    $sqlRipara="select id_ from $table_name where vistoCensura=''";
    $rsRipara=mysql_query($sqlRipara);
    while(
    $aRiparamysql_fetch_array($rsRipara)){
    $sqlUp="UPDATE $table_name SET enable='0' where id_='".$aRipara['id_']."'";
    mysql_query($sqlUp);
    }
    $_SESSION['aAggDati']=array();
    }
            
    }
    //end if controllo    
    }//end if isset sessione
    }//fine azione edita 
    ------------------------------------------------------
    spero che così sia più chiaro

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.