問題タブ [fgetcsv]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
php - .csvファイルとカンマの欠落に関する問題
こんにちはすべて私はPHPコードを介してCSVを開くことに問題があります。私のPHPコードは次のとおりです。
問題はPHPコードではなく、.csvファイルにあります。PHPコードは、通常の方法で情報を表示する場合、カンマが欠落している場合でも機能する必要があります。
.csvファイル:
php - PHP fgetcsv で致命的なエラーが発生しました: Firefox で最大実行時間が超過しました
まず、PHPの「fatal error: maximum execution time exceeded」はサーバー側のエラーで、ブラウザのバージョンに依存するべきではないと思いますよね?しかし、それはあるようです!?!
フォームのテキスト領域からのcsvデータを読み取るこのコードがあります。
そして、データはこれで、特に何もなく、4 列 3 行です。
コードはすべてのブラウザー (IE、Chrome など) で動作します。Firefox 以外の解析済みデータを見ることができます!!!!! 異なるPCでテストしましたが、同じです。すべてのブラウザは問題ありませんが、Firefox は「fgetcsv」のある行に「致命的なエラー: 最大実行時間を超えました」と表示します。
PHPバージョン5.2.10と2つの異なるFirefoxバージョン3.5.16および3.6.6を使用しています
誰もこの問題を見たことがありますか?
編集: コードは、すべてのブラウザーを備えた 2 つの異なる PC を使用して、2 つの異なる Linux サーバー CentOS 5.3 および 5.5 でテストされています。
編集2:解決済み
問題が見つかりました。$delimiter の値は、「,」「;」の 3 つの値から取得されます。ブラウザが「\ t」をスペースとして表示する「\ t」と、私はそれに注意を払いませんでした。
Firefox が \t に対して何かを行っているようで、PHP はそれがタブであることを認識していません。ただし、他のブラウザは期待どおり \t を送信します。
fgetcsv($handle, 1000, "\t", '"') のように "\t" をハードコーディングすると、Firefox でも正常に動作します。
IEではなく、Firefoxが初めて私に多くの問題を引き起こしました:)
php - fputcsvおよびfgetcsv
私のコードは次のようになります..o/pは、1つのセルに4つの値があり、最初の列だけに4つの値があるcsvファイルです。
このコードのより良いバージョンをお願いします。できるだけ速くに
php - PHP csv parser eating characters like "é", "í", at the start of a field
I am trying to parse a csv file in PHP. My problem is the following: If there is a field stating with "é" or "í", the parser eats all those characters from the start of a field.
The problem is only present on my host, it's not present when using XAAMP locally (newer PHP version). The PHP version on my host with the bug is: 5.2.6-1+lenny9
The code is nothing but one line of fgetcsv.
This code already outputs the "eaten" version, for example when viewed by print_r.
Is there anything I can do? It must be a bug in PHP something, which has been fixed since then. One alternative option I found out was to just escape the sequence, by putting a comma at the end of a field (my csv source, Google Spreadsheets automatically wraps the field in " " if there is a , present inside). Then I can write a function that deletes the last character if it's a comma (any help on this?).
Is is (or was it) a known bug in PHP, and were there any solutions for this? If not, can you help me with the delete-last-character-if-its-a-comma function?
php - すべての行を返すphp fgetcsv
次の csv ファイルがあります。
私がこれを行うとき:
183 要素の配列を取得します。取得できるのは csv の 1 行のみですが、ファイル全体を取得します。
私も試し$data = fgetcsv($handle, 1000);
てみましたが、同じ結果が得られました
php - PHP - フロントエンドへのCSVからMySQLへ、そしてCSVへのバック、エンコーディング/文字列関数のベストプラクティス?
MySQL データベースでデータ (製品) を維持するために CSV ファイルが使用されているシナリオがあります。基本的に、クライアントが製品を維持するために従う手順は次のとおりです。
- 事前定義された列の CSV ファイルに項目を追加します
- バックエンドで CSV をアップロードします
- PHP スクリプトが CSV データを反復処理する
- データは検証/クリーニングされ、MySQL データベースに送信されます
クライアントがアイテムを編集、追加、または削除するときも同じことが逆に適用されますが、これはバックエンドから直接行うこともできます。データベースまたはダウンロードしたスプレッドシートで特定の文字が正しく表示されないという問題が発生したので、私の質問は次のとおりです。
一般に、CSV ファイルの形式でデータを追加および取得するときに、データに適用するのに適したエンコードまたは文字列関数のセットは何ですか? 私のMySQL接続エンコーディングはUTF-8ですが、CSVファイルをUTF-8文字セットで保存しようとしましたが、Excelが自動的にデフォルトのWindows-1252エンコーディングを適用し、すべてのym UTF-8文字を壊しているようです.
Open Office.org などのアプリケーションは、インポート文字セットを求めるプロンプトを表示し、Unicode UTF-8 に設定すると問題なく表示されます。明らかに、クライアントが常に Excel や Open Office を使用しているとは限りません。PC / CSV > MySQL > PC / CSV 作業に戻るための適切なソリューションは何ですか?
すべての提案は歓迎され、高く評価されました。
サイモン
php - PHP fgetcsv() がすべての行を読み取らない
リモート CSV ファイルを読み取り、CSV ファイルの内容に基づいて製品をデータベースに追加する php スクリプトがあります。現在、約 2800 行 (製品) がありますが、スクリプトは 1388 行で停止し続けています。
私が使用したコードは次のとおりです。
PHP のメモリ制限を 64M に設定し、128M も試しました。また、max_execution_time を 60 分に設定しました。また、次のようにコードを変更しようとしました。
その DID により、より多くの行が解析されますが、データが正しくありませんでした。つまり、画像の列が説明の列などになっていました。これは、行末として \r を追加することに関係していると思います。\n試してみましたが、うまくいきませんでした。最後に、ini で auto_detect_line_endings を true として追加しました。
私のデータが短縮されている理由を誰か提案できますか?
よろしく、サイモン
編集
興味深いことに気がつきました。上記のコードでループされている各行に MySQL 挿入があります。現在、私のデータベースの最後のレコードは CSV ファイルの最初の行です。これは、ファイルが最後の行から解析されているということですか??
これらは、ブレークまたはその近くの行のようです。
解決
結局のところ、ファイルをサーバーにコピーし、そのコピーから作業する方がずっとうまくいきました。私が従った手順は次のとおりです。
- を使用してリモートファイルの内容を読み取ります
file_get_contents()
- 次に、
iconv(
)関数を使用して、データをUTF-8に再エンコードしました fopen()
、fwrite()
および関数を使用して一時ファイルを作成しましたfclose()
。ファイルの内容は上記のエンコードされたデータでしたchmod()
関数を使用してファイルのパーミッションを 0750 に設定しました- 次に、
fgetcsv()
関数を一時ファイルに適用しました - 必要な作業はすべて完了しましたか
unlink()
関数を使用して、完了したら一時ファイルを削除しました
それはトリックをしました。したがって、問題の半分は実際にはリモート サーバーのタイムアウトであり、残りの半分はエンコードの問題であると思われます。
正しい方向へのすべての微調整をしてくれたみんなに感謝します
php - 解析する前にCSVファイル全体を再エンコードします-単純なPHPを使用しますか?
リモートCSVファイルの内容を読み取り、行を繰り返し、データ項目をデータベースに追加するスクリプトがあります。このファイルには平均で約3000行、したがって3000の製品があります。
いくつかのことを明確にするために:
- CSVファイルのデータを事前に管理できません
- このCSVファイルが作成される方法にアクセス/制御することはできません
- CSVファイルは、MySQLデータベースのデータから1日1回動的に生成されます
問題:
私のスクリプトは約1300行を繰り返すだけで、エラーは発生せず、何も停止しません。すべてのテキストは二重引用符で囲まれており、通常、CSVファイルは正しくフォーマットされているようです。奇妙なことに、CSVファイルをダウンロードしてNotepad ++で開き、エンコーディングをBOMなしのUTF-8に変更し、それをテストサーバーにアップロードして、そのファイルでスクリプトを実行すると、3000個のアイテムがすべて取得されます。結構です。
それで、このファイルを生成する人々はデータをUTF-8として挿入する必要があると思いますか?そのプロセスを制御できないため、BOMエンコードなしでUTF-8をそのファイルに適用する、または少なくともファイルの内容を変数に読み込んで再エンコードする、かなり簡単な方法があるかどうかを知りたいと思います。 ?
どうもありがとう
php - csv ファイルを解析して最初に列名を取得し、次にそれに関連する行を取得するにはどうすればよいですか?
ここに私のcsvがあります
もちろん、最初の行は列名です。fgetcsv() を試しましたが、すべての行を表示するだけです。私が欲しいものではなく。どうすればできますか?
したがって、最後にデータを配列に入れると、Excel に表示されているのと同じように、データの表形式を印刷できます。
ありがとう
これは私のサンプルです:
これは私の出力です: (私はそれを表示できるように $row を pre に入れました)
php - csvのフィールドの最初の文字がありません
私はphpでcsvインポートスクリプトに取り組んでいます。フィールドの先頭にある外国文字を除いて、正常に機能します。
コードは次のようになります
これが私の問題を示すデータ例です
これにより、次のようになります
私はこの振る舞いがphp.netのいくつかのコメントに文書化されているのを見て、行末ini_set('auto_detect_line_endings',TRUE);
を検出しようとしました。失敗。
この問題に精通している人はいますか?
編集:
AJに感謝します、この問題は解決されました。
setlocale(LC_ALL, 'en_US.UTF-8');
解決策でした。