サーバーやソースコードと同じ文字コード(UTF-8)なのに日本語のCSVファイルが読み取れない
という状況がありました。
PHP内に下記の記述を追加して、ロケールを設定することで日本語が読み取れるようになりました。
|
1 |
setlocale(LC_ALL, 'ja_JP.UTF-8'); |

在宅プログラマーの備忘録として2005年に始めたブログです。
サーバーやソースコードと同じ文字コード(UTF-8)なのに日本語のCSVファイルが読み取れない
という状況がありました。
PHP内に下記の記述を追加して、ロケールを設定することで日本語が読み取れるようになりました。
|
1 |
setlocale(LC_ALL, 'ja_JP.UTF-8'); |
入力チェックでよくある0~9の「半角数字」のみかどうかのチェックです。
|
1 2 3 4 5 6 7 8 9 10 |
function check_number($caption, $value) { if($value == '') { return null; } $preg = '/^[0-9]+$/'; if(!preg_match($preg, $value)) { return "$caption は数字を入力してください"; } return null; } |
正しければNULLを返します。
いろんな方法があるかと思いますが、
|
1 |
str_getcsv() |
を使った方法です。
|
1 2 3 4 5 6 7 8 9 10 |
function read_csv_array($filename) { $ret = array(); $buf = mb_convert_encoding( file_get_contents($filename), 'utf-8', 'auto'); $lines = explode("\n", $buf); foreach ($lines as $line) { $ret[] = str_getcsv($line); } return $ret; } |
file_get_contentsはファイル取得だけでなく、他のサイトのAPIをコールしたりするときに便利ですよね。
ただ、エラー処理を行うには自分でレスポンスヘッダーを解析する必要があります。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
$result = @file_get_contents(省略); if($result === false) { if(isset($http_response_header) && count($http_response_header) > 0) { $status = explode(' ', $http_response_header[0]); switch($status) { case 401: // Unauthorized break; case 404: // Not Found break; case 500: // Internal Server Error break; default: // その他 break; } } else { // タイムアウト } } |
__FILE__は実行中のファイル名が取得できますが、
フレームワークなどを利用していて、インクルード元のファイル名を取得したいときは
|
1 |
debug_backtrace() |
が便利です。
この関数の結果は配列で受取ります。
添え字が大きいほうがインクルード元のファイルの情報になりますので、
|
1 2 |
$trace = debug_backtrace(); $file = $trace[1]['file']; |
で、インクルード元のファイル名が取得できます。