Ankündigung

Einklappen
Keine Ankündigung bisher.

Problem mit großen CSV Dateien

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Problem mit großen CSV Dateien

    Hallo PHP.de Community.
    Bin noch nicht ziemlich erfahren was PHP angeht und hoffe ihr könnt mir weiterhelfen. Ich lese eine CSV-Datei mit dem Befehl fgetcsv in einer Schleife ein. Bei kleinen TestCSV-Dateien funktioniert es, allerdings werden größere nicht mehr angezeigt. Wie kann ich das Problem umgehen? Danke schonmal für die Antworten im vorraus

    PHP-Code:
    $handle fopen($_POST["datei"], 'r');
    print 
    "<table>\n";

    while(
    $data fgetcsv ($handle,4096';')) {
        print 
    "<tr>\n";
        foreach(
    $data as $value) {
        print 
    "<td><input type='text' value='" trim($value) . "'></td>\n";
        }
        print 
    "</tr>\n";
        
    $row++;
    }

    print 
    "</table>\n";
    fclose($handle); 


  • #2
    - Was heißt größere (von welchen Dimensionen reden wir)
    - Was heißt „nicht angezeigt“ (Leerer Browserqueltext)?
    - Bitte error reporting einstellen (Google!)

    Vermutlich ein Problem mit einem Timeout. Evtl. kannst Du flush() benutzen, um überhaupt erstmal was zu sehen. Mit Tabellen im Browser ist das allerdings noch einmal eine eigene Sache (U.U. erst Darstellung wenn die Tabelle komplett ist).
    --

    „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
    Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“


    --

    Kommentar


    • #3
      - Was heißt größere (von welchen Dimensionen reden wir)
      Die Datei die nicht angezeigt wird ist 3,78 MB. Allerdings habe ich dieselbe um etliche Einträge zu Testzwecken erleichtert (900kb) und dann wir sie angezeigt.

      - Was heißt „nicht angezeigt“ (Leerer Browserqueltext)?
      Er gibt nichts aus, außer dem Table-Tag im Quelltext
      Code:
      !DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
      <html xmlns="http://www.w3.org/1999/xhtml">
      <head>
      <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
      <title>Untitled Document</title>
      </head>
      <body>
      <p> Die von ihnen ausgewählte CSV enthält diese Daten :</p>
      <table>
      </table>
      
      </body>
      </html>
      Vermutlich ein Problem mit einem Timeout. Evtl. kannst Du flush() benutzen, um überhaupt erstmal was zu sehen.
      Werde es mal probieren

      Mit Tabellen im Browser ist das allerdings noch einmal eine eigene Sache (U.U. erst Darstellung wenn die Tabelle komplett ist).
      Nein, da die Seite nichts mehr abarbeitet.

      Kommentar


      • #4
        Bitte beachte alle Punkte von nikosch Posting, insbesondere Error-Reporting. Das Anzeigen von Fehlern solltest du ebenfalls aktivieren.

        Zusätzlich kann dich der Browser auch einfach totschießen wenn zuviel Content geliefert wird. Eine Website ist nicht unbedingt darauf ausgelegt 4 MB Text anzuzeigen (vermutlich deutlich mehr, wenn die CSV aus reinen Daten besteht).

        Zudem ists eher ungewöhnlich, dass dein Skript die Tabelle noch schließt (</table>) und seit <table> nichts im Quelltext steht. Dann ist vermutlich schon im oder vor dem ersten Schleifendurchlauf ein Fehler entstanden, den du aber nicht angezeigt bekommst. Hier wären wir wieder beim Error-Reporting.
        "Mein Name ist Lohse, ich kaufe hier ein."

        Kommentar


        • #5
          Ja. Timeout etc. kann man damit ausschließen. Naheliegend wäre, dass in $_POST["datei"] (fopen($_POST["datei"]) was falsches ankommt. Btw. ist das eh eine gefährliche Kiste, ich hoffe Du änderst das noch.
          --

          „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
          Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“


          --

          Kommentar


          • #6
            Error Report zeigt folgendes an:

            Warning: fopen(test2.csv) [function.fopen]: failed to open stream: No such file or directory in /homepages/xx/xxxxxxxxxx/htdocs/other/index2.php on line 15

            Warning: fgetcsv(): supplied argument is not a valid stream resource in /homepages/xx/xxxxxxxxxx/htdocs/other/index2.php on line 20

            Warning: fclose(): supplied argument is not a valid stream resource in /homepages/xx/xxxxxxxxxx/htdocs/other/index2.php on line 36
            Was mich immer noch wundert ist einfach das es mit kleineren Dateien klappt. "Not a valid stream resource" klingt nicht danach als wär einfach die Datei zu groß.Dachte, da der Fehler Zeile 20 und 36 auftritt, das da irgendwelcher Unsinn steht in der CSV, dies ist aber nicht der Fall...

            @nikosch : Was ist daran gefährlich? Bin ja noch ziemlich unerfahren und wäre dir sehr dankbar für Hinweise bezüglich der Sicherheit. Da die PHP aber eh immer nur in einem Passwortgeschützten Bereich genutzt wird, dürfte es da keine Probleme geben,oder?

            Schonmal Danke für die bisherige Hilfe.

            Kommentar


            • #7
              Warning: fopen(test2.csv) [function.fopen]: failed to open stream: No such file or directory in
              Die Datei existiert im angegebenen Ordner nicht.
              Was ist daran gefährlich?
              Dass man bspw. durch relative Pfade auch nicht gewünschte Dateien damit auslesen kann.
              Da die PHP aber eh immer nur in einem Passwortgeschützten Bereich genutzt wird,
              Diese ARgumentation ist weitverbreitet. Scriptsicherheit bedeutet aber nicht nur Sicherheit vor (bösen Hacker-)Angriffen, sondern auch vor Bedienungsfehlern. Man kann sich gar nicht vorstellen, auf was für Ideen Endbenutzer kommen.
              --

              „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
              Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“


              --

              Kommentar


              • #8
                Die Datei existiert im angegebenen Ordner nicht.
                Doch sie existiert, ich wähle sie ja direkt von der Festplatte aus und die kleine Datei wird ja auch gefunden. Ausgewählt wird das ganze durch
                Code:
                <input type="file" name="datei">
                .

                Dass man bspw. durch relative Pfade auch nicht gewünschte Dateien damit auslesen kann.
                Es geht ja darum die Dateien von der Festplatte des Benutzers auszugeben und anschließend in einer MYSQL Datenbank zu speichern.

                Diese ARgumentation ist weitverbreitet. Scriptsicherheit bedeutet aber nicht nur Sicherheit vor (bösen Hacker-)Angriffen, sondern auch vor Bedienungsfehlern. Man kann sich gar nicht vorstellen, auf was für Ideen Endbenutzer kommen.
                Natürlich ist Scriptsicherheit wichtig, aber als Anfänger wär ich erstmal froh wenn es so funktioniert

                lg

                Kommentar


                • #9
                  PHP gibt Fehlermeldungen sicher nicht zum Spaß aus, also darfst du davon ausgehen dass die Datei nicht da ist, vllt in nem anderen Ordner oder so...

                  Hochgeladene Dateien sind im $_FILES Array...
                  Hast du das enctype-Attribute im Form-Tag richtig gesetzt ?

                  Grüße
                  Signatur:
                  PHP-Code:
                  $s '0048656c6c6f20576f726c64';
                  while(
                  $i=substr($s=substr($s,2),0,2))echo"&#x00$i;"

                  Kommentar


                  • #10
                    PHP gibt Fehlermeldungen sicher nicht zum Spaß aus, also darfst du davon ausgehen dass die Datei nicht da ist, vllt in nem anderen Ordner oder so...
                    Ähm, ja, ich dachte mir schon das Fehlermeldungen nicht zum Spass dastehen

                    Hochgeladene Dateien sind im $_FILES Array...
                    Hast du das enctype-Attribute im Form-Tag richtig gesetzt ?
                    Gute Frage,mein Form-Tag sieht folgendermaßen aus :
                    <form method="post" action="index2.php" enctype="multipart/form-data">

                    Denk mal das es so funktionieren müsste. Hab testweise auch enctype komplett rausgelassen (dann nimmt er ja den Standart application/x-www-form-urlencoded). Ich würde es ja jetzt spontan auf eine Fehlerhaft CSV schieben, aber
                    Code:
                    Warning: fopen(test2.csv) [function.fopen]: failed to open stream: No such file or directory in /homepages/33/d317992492/htdocs/other/index2.php on line 15
                    klingt komisch, da die Zeile nicht wirklich sich von Rest unterscheided...

                    Kommentar


                    • #11
                      Das ist kein Fehlerhaftes CSV "no such file or directoy" sagt eigentlich alles ??

                      Evtl nicht lesbar ?
                      Evtl nicht vorhanden ?

                      [MAN]file_exists[/MAN]
                      [MAN]is_readable[/MAN]

                      Kommentar


                      • #12
                        Zitat von Papst Beitrag anzeigen
                        Das ist kein Fehlerhaftes CSV "no such file or directoy" sagt eigentlich alles ??

                        Evtl nicht lesbar ?
                        Evtl nicht vorhanden ?

                        [MAN]file_exists[/MAN]
                        [MAN]is_readable[/MAN]
                        Das Problem ist ja das es mit der selben Datei sobald ich ein paar Einträge rauslösche (halt 2-3MB) es funktioniert, deshalb ist ja für mich unverständlich warum diese Fehlermeldung kommt...

                        Kommentar


                        • #13
                          umbenannt ? gelöscht ? falscher dateiname ?

                          ich kann ja nicht in dein dateisystem schauen...
                          wie ja bereits jemand schrieb, PHP schmeißt diese Fehlermeldungen nicht aus jux und dollerei...

                          prüf doch einfach mal ob die Datei für PHP vorhanden ist...

                          Kommentar


                          • #14
                            Zitat von MrNobody Beitrag anzeigen
                            Code:
                            <input type="file" name="datei">
                            Ha.. guck mal.. gefunden...
                            PHP: move_uploaded_file - Manual
                            z.b. da gibts infos zum Dateiupload via PHP

                            Kommentar


                            • #15
                              $handle = fopen($_POST["datei"], 'r');
                              Du weißt schon, dass damit jeder jede Datei auf dem Server öffnen kann, die PHP lesen darf?
                              "Mein Name ist Lohse, ich kaufe hier ein."

                              Kommentar

                              Lädt...
                              X