Excelで作ったcsvファイルが行ロード出来ない
という問題
Excelで作ったcsvをphpで行ロード(fgetcsvとか)しようとすると改行コードを認識せずなんだかすごい事になっていた
当たり前である
なんせ実行機はMacだったのだから。。。
さて、CRとLFによって改行コードはあらわされるわけですが、機種によって改行コードは異なります。 改行コード 使用機種 LF UNIX系OS CR マッキントッシュ CR+LF Windows(MS-DOSやWindowsNTも同様です) OSによって、改行コードが異なるので、クライアントのOSを限定できないWebプログラミングでは、注意が必要になります。
改行コードの話より引用
通常、ブラウザなんかで見る場合
改行コードのギャップはブラウザが埋めてくれる
が、こーいった代物の場合は自力で埋めなければならない
なんせ、そーいった便利なシステムを作る側な訳だからだ
という訳で、こういったファイルアップで動くシステムの場合は改行コードに注意しておかなければならない
変換とかして統一すればイインデネーノ
と思ったがこんなオプションを見つけた
auto_detect_line_endings boolean onにした場合、PHPは fgets() および file() により読み込まれたデータを評価し、UNIX、MS-DOS、Machintoshの行末表記を使用しているかどうかを調べます。 これにより、PHPがMacintoshシステムと相互運用できるようになりますが、 デフォルトはOffとなっています。これは、最初の行の行末表記を検出する際にごく僅かな性能劣化があるためと、UNIXシステムのもとで復改文字を項目セパレータとして使用している人が従来のバージョンと互換性がない動作であると感じる可能性があるためです。 注意: この設定オプションは、PHP 4.3で追加されました。
PHP: 実行時設定 - Manualより引用
php.iniで設定されてる項目でこのギャップを自動で修正してくれるオプションがあった
デフォではoffになってるが、この問題に対応したくonにしても問題ないならこれで改行問題は気にしなくてよくなる
言うまでもないがiniを編集したくないなら以下の構文で制定出来る
ini_set("auto_detect_line_endings", true);
が、所詮は付け焼き刃なので改行変換して統一するべき何じゃないだろうか
でもさ、その場合ってどの改行コードにするのが一般的なんだろうね?
ちなみにfgetcsvだけれども、この関数はSJISにすごく弱いらしい
おのれSJIS。これ作った人はすごいと思うがいかんせん向いてない事が多すぎる
詳しい事はググって調べると色々出てくる。
まぁ、素直に行ロードして指定区切りで分けるとよろし
MAC OSX で利用可能なターミナルコマンド
のまとめ
こつこつ纏めていこう
とりあえず、コマンド系統に記事にしてこの記事で分類してゆく
Server should be SSL-aware but has no certificate configured [Hint: SSLCertificateFile]
このエラーが鬼の要に乱発した
解決にきりきり舞いした上に混迷しまくったが、結果的に以下の部分が問題だった模様
- 証明書と鍵のhost名称がVirtualHostのServerNameと違っていた
要するに証明書の不一致でこのエラーが出ていた模様
httpd: apr_sockaddr_info_get() failed for
設定されているホスト名が正しくない
このエラー下に詳細が出ている。全文はこれ
httpd: apr_sockaddr_info_get() failed for [PC-NAME] httpd: Could not reliably determine the server's fully qualified domain name, using [IP] for ServerName
PC-NAMEがIPと関連出来ていない?
解決しよう
httpd.confのServerNameを変更
ServerName localhost:80
と明示する
ちなみに
HOSTNAMEが見つからない場合も同様らしい
こちらは
/etc/hostsに追記する