バージョン選択

フォーラム

メニュー

オンライン状況

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

サイト内検索

質問 > 管理機能 > 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
居住地: 東京
投稿: 794
Re: open_basedir, is not within the allowed path(s)
OS、どこのレンタルサーバーのどういう契約なのか、などの情報が無いと何とも答えられないと思います。
一番手っ取り早いのはホスティング業者に問い合わせる事の様な気もします。
seasoft
投稿日時: 2009/3/30 22:50
対応状況: −−−
登録日: 2008/6/4
居住地:
投稿: 7333
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ペイメント

公式ストアEC-CUBE4系デザインテンプレート続々リリース中

統計情報

総メンバー数は73,736名です
総投稿数は102,973件です

投稿数ランキング

1
seasoft
7333
2
468
3132
3
AMUAMU
2712
4
nanasess
2192
5
umebius
2042
6
yuh
1664
7
red
1456
8
h_tanaka
1169
9
tsuji
942
10
fukap
907
11
shutta
835
12
tao_s
794
13 ramrun 789
14 karin 689
15 sumida 641
16
homan
633
17 DELIGHT 572
18
patapata
502
19
flealog
485
20 tonton 437


ネットショップの壺

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

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