質問 > 管理機能 > カテゴリCSV一括登録でシステムエラー発生 |
管理機能
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | 下へ |
投稿者 | スレッド |
---|---|
saimei1 |
投稿日時: 2020/6/13 14:10
対応状況: −−−
|
半人前 登録日: 2019/6/3 居住地: 投稿: 15 |
カテゴリCSV一括登録でシステムエラー発生 ▼テンプレート
[EC-CUBE] 4.02 [レンタルサーバ] localマシン [OS] Mac OS X 10.14.6 [PHP] 7.1.26 [データベース] MariaDB 10.1.37 [WEBサーバ] Apache/2.4.37 [ブラウザ] safari 、edge、firefox [導入プラグインの有無] なし [カスタマイズの有無] なし [現象] カテゴリCSV一括登録でCSVファイルを指定して一括登録を実行させると システムエラーが発生し、管理者へ連絡するようにというメッセージが表示される デバッグモードにしてログを表示させたところ下記のようなメッセージが表示される Warning: fwrite() expects parameter 1 to be resource, boolean given in Eccube/Controller/Admin/AbstractCsvImportController.php (line 66) } $file = StringUtil::convertLineFeed($file); $tmp = tmpfile(); fwrite($tmp, $file); rewind($tmp); $meta = stream_get_meta_data($tmp); $file = new \SplFileObject($meta['uri']); set_time_limit(0); AbstractCsvImportController->getImportData(object(UploadedFile)) in Eccube/Controller/Admin/Product/CsvImportController.php (line 555) $form->handleRequest($request); if ($form->isValid()) { $formFile = $form['import_file']->getData(); if (!empty($formFile)) { log_info('カテゴリCSV登録開始'); $data = $this->getImportData($formFile); if ($data === false) { $this->addErrors(trans('admin.common.csv_invalid_format')); return $this->renderWithError($form, $headers, false); } ・ ・ ・ のように表示されます 問題、解決方法などわかれば教えていただけないでしょうか? CSVファイルに問題があるのかと思い項目名だけのファイルを送って 見ても同様のエラーになります また、Windows10上で立ち上げたローカル環境で同じことを行なったら データ項目がないなどのメッセージが返ってくるなどがありましたが 問題の環境ではそれ以前のところでエラーが発生しているようです よろしくお願いします |
468 |
投稿日時: 2020/6/15 10:05
対応状況: −−−
|
神 登録日: 2008/10/26 居住地: 投稿: 3217 |
Re: カテゴリCSV一括登録でシステムエラー発生 Eccube/Controller/Admin/AbstractCsvImportController.php (line 66)
の箇所を確認すると
の記述があるのですが $tmpにfalseが入ってきていないでしょうか? 直前で
によってテンポラリファイルを作成しようとしていますが 何かしらの理由でテンポラリファイルに作成に失敗するとfalseが返ってくるかと思います。
|
saimei1 |
投稿日時: 2020/6/15 14:41
対応状況: 確認中
|
半人前 登録日: 2019/6/3 居住地: 投稿: 15 |
Re: カテゴリCSV一括登録でシステムエラー発生 ご返信ありがとうございます
>$tmpにfalseが入ってきていないでしょうか? すみません$tmpに何か入ってきているかはどのように 確認すればいいでしょうか? 一応デバッグモードにするとログが表示されることは わかったのですが、変数などの情報もデバックモードの画面で 確認できるのでしょうか? >テンポラリファイルを作成しようとしていますが 何かしらの理由でテンポラリファイルに作成に失敗するとfalseが返ってくるかと思います。 テンポラリファイルが作成される場所はどこになるのでしょうか? それらしい場所を探してみたところ var/cache/dev/dev/eccubeにupload_*****.csvというファイルがあり開いてみると送った一括登録用のcsvファイルでした キャッシュとテンポラリファイルは別ということでしょうか? すみません、不慣れなためアドバイスいただければ助かります よろしくお願いします |
468 |
投稿日時: 2020/6/16 11:48
対応状況: −−−
|
神 登録日: 2008/10/26 居住地: 投稿: 3217 |
Re: カテゴリCSV一括登録でシステムエラー発生 dump($tmp);
等で中身を確認する事が出来るのではないかと思います。 デバッグモードの場合、画面にオブジェクトの内容が表示されるかと思います。 >テンポラリファイルが作成される場所はどこになるのでしょうか? /tmpなどOSで用意されている一時ディレクトリを利用していると思われます。 アップロードしたCSVを保存しているキャッシュはECCUBEでの機能かと思いますが テンポラリファイル[tmpfile()]はPHPレベルでの機能となりますので別物という認識で良いかと思います。 tmpfile()はファイルの新規作成から利用が終るとファイルの削除まで勝手に行ってくれるという便利な関数なので 使い分けはファイルを残す必要があるかどうかではないかと思います。 ただtmpfile()が利用できないという話はあまり聞いた事がなく、 仮に利用できないというのであればサーバ環境の問題になってくるのではないかと思います。 もしかしたら第2引数の$fileが問題を抱えているのかもしれませんが...
|
saimei1 |
投稿日時: 2020/6/17 14:07
対応状況: −−−
|
半人前 登録日: 2019/6/3 居住地: 投稿: 15 |
Re: カテゴリCSV一括登録でシステムエラー発生 ご返信ありがとうございます
>dump($tmp); 等で中身を確認する事が出来るのではないかと思います。 デバッグモードの場合、画面にオブジェクトの内容が表示されるかと思います。 ちょっと内容ややり方がわからなかったのですがとりあえずソースのAbstractCsvImportController.phpの該当箇所に下記のようにコードを追加して見ましたが、エラー表示画面に表示はされていません $tmp = tmpfile(); dump($tmp);<<追加コード dump($file);<<追加コード fwrite($tmp, $file); あまり知識がなくて申し訳ないのですが、デバッグモードで画面が表示されるとはどういうことなのでしょうか? 画面下にsfというボタンのようなものがあってそれを開くといくつかのメニュー項目が出て きますがそれを使うのでしょうか? >/tmpなどOSで用意されている一時ディレクトリを利用していると思われます。 php.iniに下記のように指定されていましたupload_tmp_dir="/Applications/XAMPP/xamppfiles/temp/" ここをブランクにするとCSVファイル選択時に一時フォルダがphp.iniで設定されていない というメッセージが表示されます 書き込み権限などを指定したり、フォルダを変更したりしてもエラーは変わりませんでした とりあえず、というような状況なのですが... 何かアドバイス等ありましたらよろしくお願いします |
saimei1 |
投稿日時: 2020/6/17 23:48
対応状況: −−−
|
半人前 登録日: 2019/6/3 居住地: 投稿: 15 |
Re: カテゴリCSV一括登録でシステムエラー発生 デバッグモードでオブジェクトを表示するのと違うと思いますが、ちょっと強引なやり方で
下記のようにexitコードを追加して無理やり停止させたところなんとか内容表示できました $tmp = tmpfile(); dump($tmp);<<追加コード dump($file);<<追加コード exit;<<追加コード fwrite($tmp, $file); ↓ 出力結果 AbstractCsvImportController.php on line 66: false AbstractCsvImportController.php on line 67: "カテゴリID,カテゴリ名,親カテゴリID,カテゴリ削除フラグ\n" やはり、テンポラリファイルの作成に失敗しているようです CSVファイル自体はアップロードできていて項目名は取得されています 何かアドバイス等あればよろしくお願いします |
468 |
投稿日時: 2020/6/18 9:44
対応状況: −−−
|
神 登録日: 2008/10/26 居住地: 投稿: 3217 |
Re: カテゴリCSV一括登録でシステムエラー発生 macにXAMPPで環境を作られているのでしょうか?
私はwindowsOSでしかXAMPP環境は使ったことがないので、よく分かりませんが パーミッション関連で何かあるのではないかと思うのですが sys_get_temp_dir()を実行して、一時ファイルを保存する場所を確認されてみては如何でしょうか? 多分、返り値でテンポラリディレクトリのパスが返ってくると思います。 php.iniのupload_tmp_dirはファイルアップロード時(アップロードしたCSVや画像ファイル)を一時的に格納するディレクトリで tmpfile()とは関係の無いディレクトリになるかと思います。
|
saimei1 |
投稿日時: 2020/6/18 21:38
対応状況: 解決済
|
半人前 登録日: 2019/6/3 居住地: 投稿: 15 |
Re: カテゴリCSV一括登録でシステムエラー発生 返信ありがとうございます
とりあえずシステムエラーは発生しないようになりました 以下その経過をお知らせします 下記コードを作成し、テンポラリファイルの作成先を確認 $tmp = tmpfile(); if ($tmp==false) { print sys_get_temp_dir(); } else{ print $tmp; } ↓ 出力結果 /var/folders/3k/gk92pg_901d2s_2m7vk6bgr00000gn/T /var/folders/3k/gk92pg_901d2s_2m7vk6bgr00000gn/Tがテンポラリファイルを作成する先の模様 chmodでアクセス権の変更をしようとしたが拒否されてしまう sudo chmod 777 /var/folders/3k/gk92pg_901d2s_2m7vk6bgr00000gn/T chmod: Unable to change file mode on /var/folders/3k/gk92pg_901d2s_2m7vk6bgr00000gn/T: Operation not permitted 良くわかりませんがphpのテンポラリファイル作成先だけではなく色々な用途に使われているみたいなので別のフォルダへ変更することを検討 phpinfo()の情報にsys_temp_dirという項目がありここがブランクになっていることに気づき、php.iniに下記を追加してみる(upload_tmp_dirの内容と同じ) sys_temp_dir=/Applications/XAMPP/xamppfiles/temp/ Apacheを再起動して項目名だけのカテゴリ一括登録ひな形CSVファイルをアップロードして一括登録を実行 データがありませんというメッセージが表示されるがシステムエラーは発生せず という状況です 初めに構築していたwinodwsマシンが貧弱なノートP Cだったので適当なものがなく Macで構築してみました データ移行とかの練習になると思いCSV一括登録をやろうとしてつまずいてしまっていた ことろです とりあえずはシステムエラーが発生しなくなったので先に進めそうです アドバイスありがとうございました |
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | トップ |