2017-10-12 47 views
0

工作,我有誰寫的行成3個不同的CSV文件PHP函數:fputcsv不與特定文件

if ($fonction == 1) 
    { 
     $handle = fopen("service_trames_acces.csv", "a"); 
     $ligne = array($fonction,$groupe,$zone,$no_lecteur,$no_carte, date("d/m/Y"),$date_courante2,$chrono[$no_chrono]['NO_CHRONO'],$cod_typ_acces,$statut,$codeErreur,0); 
     fputcsv($handle,$ligne); 
     fclose($handle); 
    } 

    if($fonction == 2) 
    { 

     $handle = fopen("service_trames_monet.csv", "a"); 
     $ligne = array($fonction,$groupe,$zone,$no_lecteur,$no_carte,date("d/m/Y"),$date_courante2,$chrono[$no_chrono]['NO_CHRONO'],$cod_typ_monet,$statut,1,$val_nbu_auto,$val_nbu_prec,$codeErreur,0); 
     fputcsv($handle,$ligne); 
     fclose($handle); 
    } 
    if($fonction == 3) 
    { 

     $handle = fopen("service_trames_badg.csv", "a"); 
     $ligne = array($fonction,$groupe,$zone,$no_lecteur,$no_carte,date("d/m/Y"),$date_courante2,$chrono[$no_chrono]['NO_CHRONO'],self::$entree_sortie,$statut,$codeErreur,0,0); 
     fputcsv($handle,$ligne); 
     fclose($handle); 
    } 

如果從來沒有寫入到文件中的第三。

  • 的fopen返回的ressource ID
  • fputcsv返回書面線

的lenght但文件總是空的。我在生產服務器上沒有這個問題,只是在測試中,如果我使用任何其他文件名稱的作品。

感謝您的幫助:)

+2

你有權限寫入文件嗎? – Cuchu

+0

測試這個例子http://php.net/manual/es/function.fputcsv.php#refsect1-function.fputcsv-examples,但你的文件.. – Cuchu

+0

var_dump($ ligne)¿? – Cuchu

回答

-1

下面的評論代碼段可能會有所幫助。非常有必要確保您在要寫入的文件以及包含的文件夾上具有「寫入權限」。下面的代碼段確保您擁有此權限,但僅限於文件的級別。它使用chmod()來達到這個目的。對於包含文件的目錄,由您決定一種有效的方法。

<?php 


    // CREATE AN ARRAY TO MAP $fonction TO SPECIFIC FILES 
    $loadableFiles = [ 
     1 => "service_trames_acces.csv", 
     2 => "service_trames_monet.csv", 
     3 => "service_trames_badg.csv", 
    ]; 

    // OPEN A STREAM, AUTOMATICALLY LOADING THE NECESSARY FILE 
    // BASED ON THE VALUE OF $fonction 
    $handle   = fopen($loadableFiles[$fonction]); 

    // CREATE A BASE ARRAY TO HOLD ALL ENTRIES SHARED ACROSS ALL CASES 
    $shared   = [ $fonction, $groupe, $zone, $no_lecteur, 
         $no_carte, date("d/m/Y"), $date_courante2, 
         $chrono[$no_chrono]['NO_CHRONO'] ]; 

    // INITIALIZE $ligne TO NULL 
    $ligne   = null; 

    // USING THE VALUE OF $fonction BUILD THE $ligne ARRAY 
    switch($fonction){ 
     case 1; 
      $ligne = [ $cod_typ_acces, $statut, $codeErreur, 0]; 
      break; 
     case 2; 
      $ligne = [ $cod_typ_monet, $statut, 1, $val_nbu_auto, 
         $val_nbu_prec, $codeErreur, 0]; 
      break; 
     case 3; 
      $ligne = [ self::$entree_sortie, $statut, $codeErreur, 0, 0]; 
      break; 
    } 

    // IF WE HAVE SOME DATA IN THE $ligne ARRAY, THEN WE PROCESS AND SAVE THE CSV 
    // TO BE SURE WE HAVE "WRITE-PERMISSION" ON THE FILE; 
    // WE EXPLICITLY GIVE THE PERMISSION AGAIN 
    if($ligne) { 
     // MERGE $shared WITH $ligne 
     $ligne  = array_merge($shared, $ligne); 

     // GIVE READ/WRITE PERMISSIONS TO THE FILE OWNER (@LEAST)... 
     chmod($loadableFiles[$fonction], 0644); 

     // TRY SAVING THE FILE... 
     // DUMP THE ERROR MESSAGE ON FAILURE... 
     // YOU MIGHT AS WELL THROW AN EXCEPTION... 
     try{     
      fputcsv($handle, $ligne); 
     }catch (Exception $e){ 
      var_dump($e->getMessage()); 
     } 
    } 
    // CLOSE THE STREAM 
    fclose($handle);