『ネットオウルユーザーコミュニティ』の提供に伴い、『Q&A掲示板』は2025年3月31日正午をもって提供を終了します。[関連ニュース]

メンバーメニュー

ようこそ、ゲストさん

トップ > カテゴリ一覧 > フリー/フリー 容量増加/フリー PHP+MySQLプラン > PHPのstr_getcsvやexplodeなどが配列を全て返さない

質問

  • フリー PHP+MySQL

    PHPのstr_getcsvやexplodeなどが配列を全て返さない
  • 本文:

    CSVファイルをアップロードして、その配列をもとに連想配列に
    落とし込む処理を作成中ですが、str_getcsvやexplodeなどを
    使用しても、配列の途中までしか結果を返しません。
    引数で渡す分解前の文字列ではきちんと文字列が
    入っているので、関数に渡した後の問題であることは間違い
    ないのですが、このフリープランではそういった配列数の制限の
    ようなものがあったりするのでしょうか。
    ちなみに、ローカル環境(xampp + windows)では正しく処理が
    できていることを確認できています。

    原因と対策がお分かりの方は、至急ご連絡いただきたいと思います。

    よろしくお願いいたします。

  • 緊急度:緊急投稿者:EverPetさん投稿時間:2024/08/11 08:49
質問に対する回答は締め切られました

回答 No.13039

  • この回答がベストアンサーです

  • 本文:

    「str_getcsv 日本語の処理がうまくいかない」でGoogle検索すると
    事例が出てきます。


    そういう事例と今回は関係あるかどうかですね。



    ・メモリー制限
    ・実行時間制限

    あと、フリー PHP+MySQLプラン をはじめ、レンタルサーバーに多いのが
    上記の制限。


  • 投稿者:k-tanさん 投稿時間:2024/08/11 17:10
質問者からのコメント

何度もありがとうございます。
かなりいただいた回答をざっくり判断すると、
有料プランにすれば解消されるかもということでしょうか。
どのみちフリープラン内では制限があるところまで行ってしまいそうなので、
後々は有料プランに切り替えないととは思っているのですが…。

今はとりあえず初めの文字列を短くして対応しています。
いろいろ試して問題解決されないようなら、有料プランに変更しようと思います。

回答 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