バージョン選択

フォーラム

メニュー

オンライン状況

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

サイト内検索

質問 > 管理機能 > open_basedir, is not within the allowed path(s)

管理機能

新規スレッドを追加する

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
dab
投稿日時: 2009/3/30 21:45
対応状況: −−−
半人前
登録日: 2009/1/31
居住地: 京都
投稿: 13
open_basedir, is not within the allowed path(s)
open_basedirの
File(/tmp/aaaaaaa) is not within the allowed path(s) エラーにより、商品の画像ファイルをアップロードする事が出来ないのですが、
一時ディレクトリをEC-Cubeをインストールしたディレクトリ以下に変更する事はできないのでしょうか。
または、上記エラーの別の対策方法はありますか?

PHP4.3.2、CGI、セーフモード。
サーバーの管理者権限はありません。
open_basedirに /home/username が設定されています。

php.ini、.htaccessは使用できないのか、
php.iniに
open_basedir none
open_basedir "/home/username:/tmp"
open_basedir "/home/username:/tmp/"
などを書いても、/tmp/にファイルを保存できないようです。
.htaccessは
php_admin_value open_basedir none
と書いても、Internal Server Errorになりました。
tao_s
投稿日時: 2009/3/30 22:37
対応状況: −−−
仙人
登録日: 2008/8/20
居住地: 東京
投稿: 804
Re: open_basedir, is not within the allowed path(s)
OS、どこのレンタルサーバーのどういう契約なのか、などの情報が無いと何とも答えられないと思います。
一番手っ取り早いのはホスティング業者に問い合わせる事の様な気もします。
seasoft
投稿日時: 2009/3/30 22:50
対応状況: −−−
登録日: 2008/6/4
居住地:
投稿: 7369
Re: open_basedir, is not within the allowed path(s)
そうですね。ポイントは十分に絞り込めているようですので、サーバサポートに照会するのが筋だと思います。

ちなみに、セーフモードの時点でマズいような気がします。


----------------
Seasoft
こちらでの投稿は、アイディア程度に留めさせていただいております。
個別案件の作業は有償で承っております。お気軽にご相談ください。

dab
投稿日時: 2009/3/31 0:00
対応状況: −−−
半人前
登録日: 2009/1/31
居住地: 京都
投稿: 13
Re: open_basedir, is not within the allowed path(s)
サーバーはJ-Web ( http://aiosl.com/j-web/service.html ) です。
設置依頼を受けての設置ですので、依頼者様がどのようなサービスで契約されているのかは不明ですが、
たぶんメールアドレスの個数とウイルスチェックの有無の違いしかないと思います。

phpinfo()によると、
OSはLinuxとだけ出ていて、ディストリビューションやバージョンなどは不明です。
すみませんが、何が有用な情報なのかわかりませんので、
phpinfo()の中で、有用な情報などがあれば補足します。


調べてみたところ、
data/class/SC_UploadFile.php
83行目以降、function makeTempFile()

102行目
$this->temp_file[$cnt] = $this->makeThumb(
       $_FILES[$keyname]['tmp_name'], $this->width[$cnt], $this->height[$cnt]);

となっていますので、
PHPのmove_uploaded_file()を使って/tmpディレクトリからEC-Cubeをインストールしたディレクトリに移動させるなどすれば対策できるのではないかと思ったのですが、

$dab_tmp_name= IMAGE_TEMP_URL.substr(strrchr($_FILES[$keyname]['tmp_name'], "/"), 1);
move_uploaded_file($_FILES[$keyname]['tmp_name'], $dab_tmp_name);
$_FILES[$keyname]['tmp_name']=$dab_tmp_name;

としてみたところ、

Warning: move_uploaded_file(): SAFE MODE Restriction in effect.
 The script whose uid is 3655 is not allowed to access / owned by uid 0 
in /(略)/data/class/SC_UploadFile.php on line 109
(BBS投稿時に改行追加)

やはりセーフモードとopen_basedirの制限に引っかかったようで、

$this->temp_file[$cnt] = $this->makeThumb(
       $_FILES[$keyname]['tmp_name'], $this->width[$cnt], $this->height[$cnt]);

(結果) 指定されたパスにファイルが見つかりません。

サムネイルを生成する関数でも、ファイルがないというメッセージが表示され、アップロードが中断されました。


参考
http://jp.php.net/manual/ja/reserved.variables.files.php
http://jp.php.net/manual/ja/function.move-uploaded-file.php
dab
投稿日時: 2009/3/31 1:04
対応状況: −−−
半人前
登録日: 2009/1/31
居住地: 京都
投稿: 13
Re: open_basedir, is not within the allowed path(s)
一時ディレクトリをopen_basedirで指定されたディレクトリ内に新しくディレクトリを作り、
アクセス属性を755にすることで、
詳しい動作検証は今からですが、とりあえずアップロードできるようになりました。

IMAGE_TEMP_URLのアクセス属性が、move_upload_file()のチェックに引っかかったものと思います。

長くなりますが、data/class/SC_UploadFile.php 81行目のmakeTempFile関数を全文載せておきます。
追加したのは"$dab_tmp_file"以降の3行です。

"is not within the allowed path" に関するエラーが表示された場合の対策になると思います。


    function makeTempFile($keyname, $rename = true) {
        $objErr = new SC_CheckError();
        $cnt = 0;
        $arrKeyname = array_flip($this->keyname);

        if(!($_FILES[$keyname]['size'] > 0)) {
            $objErr->arrErr[$keyname] = "※ " . $this->disp_name[$arrKeyname[$keyname]] . "がアップロードされていません。<br />";
        } else {
            foreach($this->keyname as $val) {
                // 一致したキーのファイルに情報を保存する。
                if ($val == $keyname) {
                    // 拡張子チェック
                    $objErr->doFunc(array($this->disp_name[$cnt], $keyname, $this->arrExt[$cnt]), array("FILE_EXT_CHECK"));
                    // ファイルサイズチェック
                    $objErr->doFunc(array($this->disp_name[$cnt], $keyname, $this->size[$cnt]), array("FILE_SIZE_CHECK"));
                    // エラーがない場合
                    if(!isset($objErr->arrErr[$keyname])) {
                        // 画像ファイルの場合
                        if($this->image[$cnt]) {

# '/home/username/html/tmp/'はopen_basedirに指定されたディレクトリ下層
$dab_tmp_name= '/home/username/html/tmp/'.substr(strrchr($_FILES[$keyname]['tmp_name'], "/"), 1);
move_uploaded_file($_FILES[$keyname]['tmp_name'], $dab_tmp_name);
$_FILES[$keyname]['tmp_name']=$dab_tmp_name;
                            $this->temp_file[$cnt] = $this->makeThumb($_FILES[$keyname]['tmp_name'], $this->width[$cnt], $this->height[$cnt]);

                        // 画像ファイル以外の場合
                        } else {
                            // 一意なファイル名を作成する。
                            if($rename) {
                                $uniqname = date("mdHi") . "_" . uniqid("").".";
                                $this->temp_file[$cnt] = ereg_replace("^.*\.",$uniqname, $_FILES[$keyname]['name']);
                            } else {
                                $this->temp_file[$cnt] = $_FILES[$keyname]['name'];
                            }
                            $result  = copy($_FILES[$keyname]['tmp_name'], $this->temp_dir . $this->temp_file[$cnt]);
                            GC_Utils_Ex::gfPrintLog($_FILES[$keyname]['name']." -> ". $this->temp_dir . $this->temp_file[$cnt]);
                        }
                    }
                }
                $cnt++;
            }
        }
        return $objErr->arrErr[$keyname];
    }


スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ


 



ログイン


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

統計情報

総メンバー数は93,687名です
総投稿数は111,076件です

投稿数ランキング

1
seasoft
7369
2
468
3217
3
AMUAMU
2712
4
nanasess
2318
5
umebius
2085
6
yuh
1857
7
h_tanaka
1756
8
red
1574
9
mcontact
1466
10
tsuji
958
11
fukap
907
12
shutta
835
13
tao_s
804
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.