phpのbasenameはロケール次第で日本語が扱えない

はまったのでメモ

ファイル名をとれる関数 basename を使って

$path = "/var/www/upload/日本語ファイル.txt";
echo basename($path);
// .txt

日本語ファイル.txtが出てきて欲しいのに、日本語部分が消えてしまいました

公式マニュアルの出番です
http://php.net/manual/ja/function.basename.php

ロケールに依存するらしい..

いまのロケールを見てみます

echo setlocale(LC_ALL, 0);
// C

Apacheのロケール、Cを引き継いでるっぽいです

setlocale(LC_ALL, 'ja_JP.UTF-8');
$path = '/var/www/upload/日本語ファイル.txt';
echo basename($path);
//日本語ファイル.txt'

で取れました
Apacheの設定変えてもいいかもしれません

CakephpでDIRECTORY_SEPARATORはDSでいい

CakephpではDIRECTORY_SEPARATORはDSでいいです

$ define(‘DS’, DIRECTORY_SEPARATOR);

してあるだけなんですが

[code lang=php:php]
$filePath = $directory . DS . 'some.txt';
[/code]

みたいな使い方です

定数のおさらいをしておきました
知らない定数もありました
http://book.cakephp.org/2.0/ja/core-libraries/global-constants-and-functions.html

ECCUBEの受注管理からのメールが送れない

ECCUBE 2.12.6を使っていてい
受注管理>受注管理
受注を検索して、個別通知
eccube-order

メールのテンプレートを選択して、確認画面へ、送信とすると
なぜか未入力のエラーが..
eccube-order2

ECCUBEのエラーログをみても、サーバーのエラーログをみても何もない..
メールは送られてない様子..

ソースコードを読み込んでやっとわかりました

差分はこちらです

data/Smarty/templates/admin/order/mail_confirm.tpl

[code lang=php:php]
// before
<!–{foreach key=key item=item from=$arrForm}–>
<input type="hidden" name="<!–{$key}–>" value="<!–{$item.value|h}–>" />

// after
<!–{foreach key=key item=item from=$arrHidden}–>
<input type="hidden" name="<!–{$key}–>" value="<!–{$item|h}–>" />
[/code]

hiddenへ渡す変数名が変わってる..バージョアップ時に適用もれてたみたいです
ピンポイント過ぎますがだれかの参考になるでしょうか..

ECCUBEのバージョンアップはなんとかならないでしょうか

PHPでメールを送る

借りているレンタルサーバーのPHPプログラムからメールが送られてなかったのでテストのため簡単にPHPでメールを送ってみました

mb_send_mailコマンドを使いました
http://php.net/manual/ja/function.mb-send-mail.php

<?php

mb_language("Japanese");
mb_internal_encoding("UTF-8");

if (mb_send_mail("sample@sample.co.jp", "テストメール", "これはテストです。", "From: from@example.com")) {
    echo "メールが送信されました。";
} else {
    echo "メールの送信に失敗しました。";
}

mailコマンドのラッパーコマンドです
http://php.net/manual/ja/function.mail.php

レンタルサーバーがどうやってメールを送っているか確かめる必要があります

mailコマンドか、sendmailを使っているか、どこかのメールサーバーを使っているか
などあるかと思います