質問
-
フリー PHP+MySQL
PHPのstr_getcsvやexplodeなどが配列を全て返さない -
本文:
CSVファイルをアップロードして、その配列をもとに連想配列に
落とし込む処理を作成中ですが、str_getcsvやexplodeなどを
使用しても、配列の途中までしか結果を返しません。
引数で渡す分解前の文字列ではきちんと文字列が
入っているので、関数に渡した後の問題であることは間違い
ないのですが、このフリープランではそういった配列数の制限の
ようなものがあったりするのでしょうか。
ちなみに、ローカル環境(xampp + windows)では正しく処理が
できていることを確認できています。
原因と対策がお分かりの方は、至急ご連絡いただきたいと思います。
よろしくお願いいたします。
- 緊急度:緊急投稿者:EverPetさん投稿時間:2024/08/11 08:49
回答 No.13037
-
本文:
>使用しても、配列の途中までしか結果を返しません。
特定のデータや文字列で、途切れるという現象なのでは?
読み込めるデータや文字列だけで、大量のCSVデータを作成して
読ませたら、ちゃんと最後まで読める可能性があると思う。
ちゃんと読めた場合は、「配列数の制限」「メモリー制限」以外が原因だとわかる
■
文字コードとか、LC_CTYPE とか・・。
俗にいう2バイトコード(全角、日本語)で、特定の文字が含まれてると
うまく処理されないとかでは?!
■
https://www.php.net/manual/ja/function.str-getcsv.php
>この関数はロケール設定を考慮します。もし LC_CTYPE が例えば en_US.UTF-8 の場合、 1 バイトエンコーディングの文字列は間違って読み込まれるかもしれません。
https://www.php.net/manual/ja/function.explode.php
- 投稿者:k-tanさん 投稿時間:2024/08/11 13:34
質問者からのコメント
回答ありがとうございます。
ですが、記述してあるように、自分のローカル環境では問題なく動いています。
同じプログラムコード、同じCSVファイルです。
もちろん、インストールされているPHPのバージョンの問題…も
なくはないと思いますが、そんなことがあるでしょうか?
ちなみに、CSVのエンコードはシフトジスです。
回答 No.13038
-
本文:
>引数で渡す分解前の文字列ではきちんと文字列が
>入っているので、関数に渡した後の問題であることは間違い
>ないのですが、
問題があるけケースの「分解前の文字列」の特徴をみないと
何とも言えないのでは?
■
>インストールされているPHPのバージョンの問題…も
>なくはないと思いますが、そんなことがあるでしょうか?
>ちなみに、CSVのエンコードはシフトジスです。
たとえば、CSVファイルをUnidodeにしてみて
動作の変化をみてみるとか・・。
WWindowsとLinuxでは、PHPでも文字処理関係が微妙にちがったりするので
ありえなくないと思う。
データに、日本語(全角)が含まれてますか?というのを書いてるのは
そのため。
半角英数字だけなら、問題なく動くケースが多いから。
https://www.star.ne.jp/free/manual/homepage_server_spec_1.php
- 投稿者:k-tanさん 投稿時間:2024/08/11 17:04
回答 No.13040
-
本文:
>有料プランにすれば解消されるかもということでしょうか。
情報が少なすぎて、こちらは何もわからないので・・。
直観では、関係ないと思うけど?
簡単な再現プログラムとかない限りは、こちらでは検証できない。
■
・PHPのバージョンをあげてみる
・Windows環境のPHPのバージョンに合わせてみる
[フリー PHP+MySQL]PHPバージョン設定 | 無料レンタルサーバー【スターサーバーフリー】
https://www.star.ne.jp/free/manual/homepage_php_ver_1.php
変化があるかどうか? (Y/N)
■
PHPのコード(先頭)で、ロケールを指定してみる
setlocale( LC_ALL, 'ja_JP' );
これを先頭に追加して、PHPを実行して
変化があるかどうか? (Y/N)
PHPのバージョンが7以降なら、関係ないらしいので
今回は、おそらく関係ない可能性は高い。
■
配列数の制限を疑うなら、
どの程度の配列数になったら、ダメになるかを調べる
配列数はいつですか? 1000件、1万件、10万件
配列数制限があるなら、毎回、同じ程度の数のところで
処理が終わるはず?
■
処理時間制限を疑うなら、
全データ件数がいくつで、何件までなら処理できますか?
プログラムの最後まで走ってたら、処理時間制限には引っかかってない。
処理の開始と終了に echoなどをいれて調べればわかる。
■
利用を制限しているPHP関数について
https://www.star.ne.jp/free/manual/homepage_php_1.php
フリー PHP+MySQLプラン で制限があるのは、
この程度だと思うけど・・。
- 投稿者:k-tanさん 投稿時間:2024/08/12 16:29
回答 No.13055
-
本文:
平素はネットオウルをご利用いただき誠にありがとうございます。
ネットオウル運営チームです。
本ご質問は一定期間新たな回答がなかったため
運営チームで締め切らせていただきました。
■質問の締め切りについて
Q&A掲示板はユーザー様同士の交流掲示板です。
回答がもらえた場合、回答者へお礼コメントをしましょう。
問題が解決した際にはベストアンサーを選び、
質問を締め切ってください。
■再度のご質問について
ご質問が未解決の場合、「ワンポイント!」を参考に、
再度質問してみてください。
【ワンポイント!】
メールやFTPの設定がうまくいかない場合、
ネットオウルIDやサーバーIDなどのお客様情報を公開しない範囲で、
現在の設定内容を出来るだけ詳しく書いてみましょう。
設定内容のミスを指摘してもらえるかもしれません。
エラーが出てうまくいかない場合、
エラーメッセージの内容を書いてみましょう。
エラーメッセージにはエラー原因が詳しく書かれていることが多く、
問題の解決につながる回答が得られるかもしれません。
■ベストアンサーについて
ご質問の締め切りに際して、運営チームにて
ベストアンサーを選んでおります。
※ベストアンサーの回答者様には通常と同様のポイントが
付与されています。
--ネットオウル運営チーム-- - 投稿者:ネットオウル運営 投稿時間:2024/09/02 19:49
回答 No.13039
この回答がベストアンサーです
「str_getcsv 日本語の処理がうまくいかない」でGoogle検索すると
事例が出てきます。
そういう事例と今回は関係あるかどうかですね。
■
・メモリー制限
・実行時間制限
あと、フリー PHP+MySQLプラン をはじめ、レンタルサーバーに多いのが
上記の制限。
質問者からのコメント
何度もありがとうございます。
かなりいただいた回答をざっくり判断すると、
有料プランにすれば解消されるかもということでしょうか。
どのみちフリープラン内では制限があるところまで行ってしまいそうなので、
後々は有料プランに切り替えないととは思っているのですが…。
今はとりあえず初めの文字列を短くして対応しています。
いろいろ試して問題解決されないようなら、有料プランに変更しようと思います。