我有一个PHP函数,他将行写入3个不同的CSV文件:
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);
}
第三个如果永远不写入文件。
但文件总是空的。我在生产服务器上没有这个问题,只在测试中,如果我使用任何其他文件名,它的工作原理。
感谢您的帮助:)
答案 0 :(得分:-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);