0

このコードは正常に動作します:

$csvType = $_FILES['csvtype']['tmp_name']['csv-sparkasse'];

function handleCsv($em, $csvType){
    $handle = fopen($csvType, "r");
            $i = 0;
            while (($fileop = fgetcsv($handle, 1000, ";")) !== false) {
                $entity = new Sparkasse();
                $entity->setAuftragskonto($fileop[0]);
                $entity->setBuchungstag($fileop[1]);
                $entity->setValutadatum($fileop[2]);
                $entity->setBuchungstext($fileop[3]);
                $entity->setVerwendungszweck($fileop[4]);
                $entity->setZahlungspflichtiger($fileop[5]);
                $entity->setKontonummer($fileop[6]);
                $entity->setBlz($fileop[7]);
                $entity->setBetrag($fileop[8]);
                $entity->setWaehrung($fileop[9]);
                $entity->setInfo($fileop[10]);

                if ($i > 0) {
                    $em->persist($entity);
                }
                $i++;
            }

            $em->flush();

            /* Update Table Sparkasse and create csv */
            $connection = $em->getConnection();
            $sql = $connection->prepare("UPDATE Sparkasse,Rechnung SET                 Sparkasse.Rechnungsnr = Rechnung.Belegnr
                WHERE Sparkasse.Betrag = Rechnung.Gesamt AND 
                (Sparkasse.Verwendungszweck LIKE CONCAT('%',Rechnung.Belegnr,'%') OR 
                UPPER(Sparkasse.Zahlungspflichtiger) LIKE UPPER(Rechnung.Name) OR 
                UPPER(Sparkasse.Zahlungspflichtiger) = UPPER(Rechnung.Firma) OR 
                Sparkasse.Verwendungszweck LIKE CONCAT('%',Rechnung.Kundennr,'%'))");
            $sql->execute();

            $query = $em->createQuery("SELECT s FROM AdminBundle:Sparkasse s");
            $tableSparkasse = $query->getArrayResult();
            $this->createCsv($tableSparkasse, 'sparkasse.csv');
}

そして、ここに問題があります。csv ファイルがブラウザにダウンロードされ、テーブルが正しい。しかし、ファイルの最後に、現在のページの php コードが表示されます。

function createCsv($rows, $filename) {
    header('Content-Type: text/csv; charset=utf-8');
    header('Content-Disposition: attachment; filename=' . $filename);

    $fp = fopen('php://output', 'w');

    foreach ($rows as $fields) {
        fputcsv($fp, $fields, ';', '"');
    }

    fclose($fp);
}

ここでファイルを見ることができます: https://dl.dropboxusercontent.com/u/6242507/sparkasse.csv

4

1 に答える 1

0

答えてくれてありがとう。最初の答えは私に正しい考えを与えてくれます。死んだ後 fclose(); 私はサイコロをテストします。そしてそれはうまくいきます。

私の Controller-Action では、次のフォームを返します。

return $this->render('AdminBundle:Default:index.html.twig', array(
    'form' => $form->createView(),
));

私はそれを次のように置き換えました:

return 0;

それは正常に動作します。しかし、phpがファイルの最後に閉じた後に戻り値を書き込む理由がわかりません

fclose();
于 2014-02-08T20:00:31.327 に答える