バージョン選択

フォーラム

メニュー

オンライン状況

85 人のユーザが現在オンラインです。 (70 人のユーザが フォーラム を参照しています。)
登録ユーザ: 1
ゲスト: 84
zerostaff もっと...

サイト内検索

質問 > 管理機能 > ダウンロードしたテンプレートの登録ができない

管理機能

新規スレッドを追加する

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
kazz_oga
投稿日時: 2013/8/8 11:51
対応状況: −−−
一人前
登録日: 2013/8/5
居住地: 東京都北区赤羽西
投稿: 144
ダウンロードしたテンプレートの登録ができない
[EC-CUBE]EC-CUBE2.12.5
[レンタルサーバ]local環境
[OS] MacOSX10.7.5
[PHP]5.5.0
[データベース]PostgreSQL、9.2
[WEBサーバ]Apache、2.2.22(Unix)
[ブラウザ]Safari、6.0.5 (7536.30.1)
[現象]
『EC-CUBE公式ガイドブック(基本編)』に沿って、確認中です。

テンプレートをダウンロードして、登録しようとしていますが、
「※ テンプレートファイルの解凍に失敗しました。」と出てきて、
登録ができません。

ダウンロードしたファイルをアーカイブユティリティにかけると
解凍ができます。過去のスレッドの事象と違うようです。
kazz_oga
投稿日時: 2013/8/8 23:46
対応状況: −−−
一人前
登録日: 2013/8/5
居住地: 東京都北区赤羽西
投稿: 144
Re: ダウンロードしたテンプレートの登録ができない
「※ テンプレートファイルの解凍に失敗しました。」のメッセージを出しているのがLC_Page_Admin_Design_UpDown.phpのように察します。

この処理ではダンロードファイルのチェック時、実際の解凍の段階でメッセージをだしているようです。実際の解凍の直前に格納場所のデレクトリーを作成する処理になっているようです。

デレクトリの作成を確認するとec-cube2.12.5/html/.../data/Smarty/templateにデレクトリが作られていますが、中身がありません。また、admin.logを見ると、次のメッセージがでています。

2013/08/08 23:31:06 [/eccube-2.12.5/html/admin/design/up_down.php] /Applications/XAMPP/xamppfiles/htdocs/eccube-2.12.5/html/../data/Smarty/templates/tpl20130808/tpl_package_default_20130808094054 が存在しません. from ::1

tpl20130808:指定したテンプレートコード
tpl_package_default_20130808094054.tar:選択したテンプレートファイル
kazz_oga
投稿日時: 2013/8/12 9:17
対応状況: 確認中
一人前
登録日: 2013/8/5
居住地: 東京都北区赤羽西
投稿: 144
Re: ダウンロードしたテンプレートの登録ができない
再度、登録を行い、出てくるログのメッセージを再確認してみました。

admin.logからは解凍のアクションまで行っている。しかし、解凍結果のフォルダーが作られていない。
error.logでは、Tar.php内でのfile_exits()のパラメータを正しいと思って処理する(すなわち不安がある)。

MacOS環境として、特別なパラメータの渡り方がされているようですね。

<admin.log>
2013/08/12 08:47:29 [/eccube-2.12.5/html/admin/design/up_down.php] tpl_package_default_20130808094054.tar -> /Applications/XAMPP/xamppfiles/htdocs/eccube-2.12.5/html/upload/temp_template/tpl_package_default_20130808094054.tar from ::1
2013/08/12 08:47:29 [/eccube-2.12.5/html/admin/design/up_down.php] 解凍:/Applications/XAMPP/xamppfiles/htdocs/eccube-2.12.5/html/../data/Smarty/templates/tpl20130808/tpl_package_default_20130808094054.tar->/Applications/XAMPP/xamppfiles/htdocs/eccube-2.12.5/html/../data/Smarty/templates/tpl20130808/tpl_package_default_20130808094054 from ::1
2013/08/12 08:47:29 [/eccube-2.12.5/html/admin/design/up_down.php] /Applications/XAMPP/xamppfiles/htdocs/eccube-2.12.5/html/../data/Smarty/templates/tpl20130808/tpl_package_default_20130808094054 が存在しません. from ::1

<error.log>
2013/08/12 08:47:29 [/eccube-2.12.5/html/admin/design/up_down.php] Warning(E_WARNING): file_exists() expects parameter 1 to be a valid path, string given on [/Applications/XAMPP/xamppfiles/htdocs/eccube-2.12.5/data/module/Archive/Tar.php(1609)] from ::1
kazz_oga
投稿日時: 2013/8/14 11:44
対応状況: 確認中
一人前
登録日: 2013/8/5
居住地: 東京都北区赤羽西
投稿: 144
Re: ダウンロードしたテンプレートの登録ができない
<午前中に報告したことが、一部まちがっていたので、訂正しました>

Tar.phpの1608行目のfile_existsで異常検知されていることがわかりました。

その行の前にデバック用の表示を入れてみました。
path名の文字列を連結する処理で、'/'が重複しないようにしている処理がうまく行っておらず、連結部分で'/'がふたつあらわれて、file_existsで異常となっているようです。

1602行 p_pathの末尾の'/'を削除
デバック表示でp_path名の末尾から'/'が取り除かれている
1603行 後続させるv_header['filename']の先頭が'/'であることが認識できず
1605行 else処理で、p_pathとv_header['filename']の間に'/'を入れている
    (トレース表示を入れてelse処理に跳んでいることを確認済み)

バグに見えます。対応方法を教えてください。

■Tar.phpのソースとデバックの表示位置
1592 // ----- Look if this file need to be extracted
1593 if (($v_extract_file) && (!$v_listing))
1594 {
1595 if (($p_remove_path != '')
1596 && (substr($v_header['filename'], 0, $p_remove_path_size)
1597 == $p_remove_path))
1598 $v_header['filename'] = substr($v_header['filename'],
1599 $p_remove_path_size);
1600 if (($p_path != './') && ($p_path != '/')) {
1601 while (substr($p_path, -1) == '/')
1602 $p_path = substr($p_path, 0, strlen($p_path)-1);
デバック1⇒ SC_Utils::sfPrintR("1604>p_path:".$p_path." v_header['filename']:".$v_header['filename']);
1603 if (substr($v_header['filename'], 0, 1) == '/')
1604 $v_header['filename'] = $p_path.$v_header['filename'];
1605 else
1606 $v_header['filename'] = $p_path.'/'.$v_header['filename'];
1607 }
デバック2⇒ SC_Utils::sfPrintR("1610>v_header['filename']:".$v_header['filename']);
1608 if (file_exists($v_header['filename'])) {

■デバックの表示結果
デバック1
string(359) "1604>p_path:/Applications/XAMPP/xamppfiles/htdocs/eccube-2.12.5/html/../data/Smarty/templates/tpl20130808 v_header['filename']:/abouts"
デバック2
string(352) "1610>v_header['filename']:/Applications/XAMPP/xamppfiles/htdocs/eccube-2.12.5/html/../data/Smarty/templates/tpl20130808//abouts"
kazz_oga
投稿日時: 2013/8/14 23:44
対応状況: −−−
一人前
登録日: 2013/8/5
居住地: 東京都北区赤羽西
投稿: 144
Re: ダウンロードしたテンプレートの登録ができない
なかなか、解決できていません。
ディバック用の表示を入れたら、今後の対処が思い浮かばなくなってきました。
スケジュールも気になるし、........

substr()で長さパラメータの有無の違いを確認してみました。
長さパラメータがあるとNULLで返り、無いと文字列そのものが
substrから返されているようです。
その結果、へんな文字列が作られていると、観察中です。

<Tar.php>
1592 // ----- Look if this file need to be extracted
1593 if (($v_extract_file) && (!$v_listing))
1594 {
1595 if (($p_remove_path != '')
1596 && (substr($v_header['filename'], 0, $p_remove_path_size)
1597 == $p_remove_path))
1598 $v_header['filename'] = substr($v_header['filename'],
1599 $p_remove_path_size);
1600 if (($p_path != './') && ($p_path != '/')) {
1601 while (substr($p_path, -1) == '/')
1602 $p_path = substr($p_path, 0, strlen($p_path)-1);
1603 if (substr($v_header['filename'], 0, 1) == '/'){
1604 SC_Utils::sfPrintR("YES");
1605 $v_header['filename'] = $p_path.$v_header['filename'];
1606 }
1607 else{
デバック用⇒ SC_Utils::sfPrintR("else:".substr($v_header['filename'],0,1).":".substr($v_header['filename'], 0).":");
1608 $v_header['filename'] = $p_path.'/'.$v_header['filename'];
1609 }
1610 }
1611 if (file_exists($v_header['filename'])) {

■デバック文の表示結果
string(240) "else::/abouts:"
長さ指定の返りはNULL、長さ指定なしは全文字列

kazz_oga
投稿日時: 2013/8/15 13:04
対応状況: −−−
一人前
登録日: 2013/8/5
居住地: 東京都北区赤羽西
投稿: 144
Re: ダウンロードしたテンプレートの登録ができない
長さ指定で使っているsubstrの処理についてはコメントアウトし、先に進めることにしました。
それでも、うまくいきません。

問題の箇所は、Tar.phpの1846行あたりの_dirCheckです。
・テンプレート用のデレクトリtpl20130808をSmarty/templates/に作成する際、1869行目のmkdir()の戻りがFALSEとなる。ただし、tpl20130808のデレクトリは作成される。
・作成済みのtpl20130808について、1859行目のis_dir()がFALSEとなる。

いずれも、@mkdir(),@is_dir()となっているので、@を外してerror.logを確認。
2013/08/15 15:38:22 [/eccube-2.12.5/html/admin/design/up_down.php] Warning(E_WARNING): is_dir() expects parameter 1 to be a valid path, string given on [/Applications/XAMPP/xamppfiles/htdocs/eccube-2.12.5/data/module/Archive/Tar.php(1864)] from ::1
2013/08/15 15:38:22 [/eccube-2.12.5/html/admin/design/up_down.php] Warning(E_WARNING): mkdir() expects parameter 1 to be a valid path, string given on [/Applications/XAMPP/xamppfiles/htdocs/eccube-2.12.5/data/module/Archive/Tar.php(1876)] from ::1

なお、is_dir,mkdirの引数(パラメータ)の値は次のとおり
/Applications/XAMPP/xamppfiles/htdocs/eccube-2.12.5/html/../data/Smarty/templates/tpl20130808

kazz_oga
投稿日時: 2013/8/17 11:29
対応状況: −−−
一人前
登録日: 2013/8/5
居住地: 東京都北区赤羽西
投稿: 144
Re: 20130817時点まとめ
良い状態にたどりついていません。
現在、分かっている範囲で整理すると次のとおり

単純な環境
・File_exit(),is_dir(),mkdir()もE-Warningなしで,正常に動作
・substrの長さ指定も正常に動作

EC-CUBE下のTar.phpでの発生
・バイナリデータをunpackして作られているv_data['filename']から代入、連結など作られ、v_header,p_dirに格納されているデレクトリ、ファイル名をFile_exists(),p_path(),mkdir()のパラメータにすると、いずれもFalseとなる。このとき、E-Warningがだされている。
関連行:1346,1609,1859,1869
・v_data['filename']から代入、連結せず、同じデレクトリ名をFile_exists()のパラメータにしても正常動作する。E-Warningもでない。
・v_header['filename']に対する長さ指定のsubstrは正常動作しない。
関連行:1604

E-Warningは次の内容
Warning(E_WARNING): xxxxx() expects parameter 1 to be a valid path, string given on [/Applications/XAMPP/xamppfiles/htdocs/eccube-2.12.5/data/module/Archive/Tar.php(9999)] from fe80::1
xxxxxはFile_exists,is_dir,mkdirの関数名
9999は、メッセージ発生の行数

kazz_oga
投稿日時: 2013/8/18 10:40
対応状況: 解決済
一人前
登録日: 2013/8/5
居住地: 東京都北区赤羽西
投稿: 144
Re: テンプレートの登録できました
テンプレートの登録ができました。
unpackのformatの書式コードの変更されていたためのようです。

■phpマニュアルの記載 p2.php.net/manual/ja/function.unpack.phpのunpack
Perl の関数に動きを近づけるための変更をしました。
"a" は最後の NULL バイトを維持するようになりました。
"A" は最後の ASCII 空白文字 (スペース、タブ、改行、キャリッジリターン、 NULL バイト) をすべて取り除くようになりました。
NULL 埋め文字列用に "Z" が追加されました。これは最後の NULL バイトを取り除きます。 NULL bytes.

■Tar.php(オリジナル) 1346行目
$v_data=unpack("a100filename/a8mode/a8uid/a8gid/a12size/a12mtime/"."a8checksum/a1typeflag/a100link/a6magic/a2version/"."a32uname/a32gname/a8devmajor/a8devminor/a131prefix",$v_binary_data);

■Tar.phpの変更
unpackのformat書式コードの'a'を'A'に全て変更

red
投稿日時: 2013/8/18 11:00
対応状況: −−−
登録日: 2010/2/15
居住地: 東京都
投稿: 1570
Re: テンプレートの登録できました
今更で申し訳ないですが、PHP5.5の場合Tar.phpにバグが有りますのでそういった挙動になります
http://nob-log.info/2013/07/17/php5-5-ec-cube/

EC-CUBEの次期バージョンには修正をコミットしてありますので、問題なく動きます


----------------
EC-CUBEのカスタマイズ、トラブル解決承ります
お気軽にお問い合わせ下さい
https://www.ec-cube.net/integrate/partner/partner.php?partner_id=690

kazz_oga
投稿日時: 2013/8/19 13:05
対応状況: −−−
一人前
登録日: 2013/8/5
居住地: 東京都北区赤羽西
投稿: 144
Re: テンプレートの登録できました
コメントありがとうございます。

解決が着いてから、私もhttp://nob-log.info/2013/07/17/php5-5-ec-cube/にたどりつきました。
スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ


 



ログイン


EC-CUBE公式 Amazon Payプラグイン

統計情報

総メンバー数は88,857名です
総投稿数は109,992件です

投稿数ランキング

1
seasoft
7367
2
468
3217
3
AMUAMU
2712
4
nanasess
2313
5
umebius
2085
6
yuh
1819
7
h_tanaka
1646
8
red
1570
9
mcontact
1292
10
tsuji
958
11
fukap
907
12
shutta
835
13
tao_s
799
14 ramrun 789
15 karin 689
16 sumida 641
17
homan
633
18 DELIGHT 572
19
patapata
502
20
flealog
485


ネットショップの壺

EC-CUBEインテグレートパートナー

Copyright© EC-CUBE CO.,LTD. All Rights Reserved.