前提・実現したいこと
言語:PHP
CKEditor+KCFinderで画像をアップロードするプログラムを作っています。
半角英数のファイル名だと問題なくアップロードできるのに、全角のファイル名をアップロードしようと文字化けしてしまいます。
文字化けしないようにアップロードするにはどのようにすればよいのでしょうか?
発生している問題・エラーメッセージ
Warning
Warning: chmod(): Invalid argument in C:\xampp\htdocs\localhost\public\js\kcfinder\core\class\browser.php on line 699
該当のソースコード
kcfinder内browser.phpです。
ここの下から三行目
chmod($target, $this->config['filePerms']);
の箇所でエラーが出ていました。
エラーログで前後の変数を覗いてみました。
文字化け前のファイル名で参照しにいき、そんなファイルはないよといったエラーなのかなと思うのですが・・・。
アップロードしたファイルが文字化けしていなければ、通常どおり動きそうです。
PHP
1 protected function moveUploadFile($file, $dir) { 2 $message = $this->checkUploadedFile($file); 3 4 if ($message !== true) { 5 if (isset($file['tmp_name'])) 6 @unlink($file['tmp_name']); 7 return "{$file['name']}: $message"; 8 } 9 10 $filename = $this->normalizeFilename($file['name']); 11 $target = "$dir/" . file::getInexistantFilename($filename, $dir); 12 13 if (!@move_uploaded_file($file['tmp_name'], $target) && 14 !@rename($file['tmp_name'], $target) && 15 !@copy($file['tmp_name'], $target) 16 ) { 17 @unlink($file['tmp_name']); 18 return $this->htmlData($file['name']) . ": " . $this->label("Cannot move uploaded file to target folder."); 19 } elseif (function_exists('chmod')) 20 chmod($target, $this->config['filePerms']); 21 22 $this->makeThumb($target); 23 return "/" . basename($target); 24 }
試したこと
browser.php内でbasenameでファイル名を取得している箇所が数か所あるのですが、
そこでそもそも全角ファイル名を取得できていなかったようなので
setlocale(LC_ALL, "Japanese_Japan.932")
をコンストラクタに追加しました。
ですがアップロードされてフォルダに格納されたファイルは文字化けをおこしており、その後の処理がうまくいってないようです。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/09/27 05:50
2018/09/27 05:53
2018/09/27 06:18