fputcsv不与特定文件

问题描述:

工作,我有谁写的行成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

下面的评论代码段可能会有所帮助。非常有必要确保您在要写入的文件以及包含的文件夹上具有“写入权限”。下面的代码段确保您拥有此权限,但仅限于文件的级别。它使用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);