0

ファイルアップロードスクリプトがあります:

$allowedExts = array("gif", "jpeg", "jpg", "png");
$extension = end(explode(".", $_FILES["picture"]["name"]));
if ((($_FILES["picture"]["type"] == "image/gif") || ($_FILES["picture"]["type"] == "image/jpeg") || ($_FILES["picture"]["type"] == "image/jpg") || ($_FILES["picture"]["type"] == "image/png")) && in_array($extension, $allowedExts)):
    if($_FILES["picture"]["error"] > 0):
        echo "Error: " . $_Files["picture"]["error"];
    else:
        move_uploaded_file($_FILES["picture"]["tmp_name"], "/TnA/ProfilePics/" . $_SESSION['ID'] . "." . $extension);
    endif;
endif;

しかし、私はエラーを受け取っています:

Warning: move_uploaded_file(TnA/ProfilePics/1.jpg) [function.move-uploaded-file]: failed to open stream: No such file or directory in /home/content/91/9848191/html/TnA/webservice.php on line 1067

Warning: move_uploaded_file() [function.move-uploaded-file]: Unable to move '/tmp/php5nOdhI' to 'TnA/ProfilePics/1.jpg' in /home/content/91/9848191/html/TnA/webservice.php on line 1067

これが私のファイル構造です:

Web Host Root (I have another site here)
    -TnA (Root of this site)
        -index.html
        -webservice.php
        -ProfilePics
            -(My target location)

どの相対ディレクトリURLを使用する必要がありますか?試しましたがProfilePics/1.jpg/ProfilePics/1.jpgどちらも同じエラーになります。

編集:

使用:

move_uploaded_file($_FILES["picture"]["tmp_name"], dirname(__FILE__) . "ProfilePics/" . $_SESSION['ID'] . "." . $extension);

私は得る:

Warning: move_uploaded_file(/home/content/91/9848191/html/TnA/ProfilePics/1.jpg) [function.move-uploaded-file]: failed to open stream: No such file or directory in /home/content/91/9848191/html/TnA/webservice.php on line 1067
4

1 に答える 1

3

関連するパスの使用に問題がある可能性があります。アップロードスクリプトがwebservice.phpの場合、実際にはファイルを/%webHostRoot%/ TnA / TnA /ProfilePics/ディレクトリに配置しようとしています。move_uploaded_file()のターゲットでフルパスを使用します。次のようなものを使用してみてください。

move_uploaded_file($_FILES["picture"]["tmp_name"], dirname(__FILE__)."ProfilePics/" . $_SESSION['ID'] . "." . $extension);

UPD:再帰的にdirを作成する機能は次のとおりです。

function MkDirTree($path,$permissions = 0755, $compat_mode=true) {
    if (!$compat_mode) {
        $dirs = split("/",$path);
        $path = "";
        foreach ($dirs as $key=>$dir) {
            $path .= $dir."/";
            if ($dir!="" && !is_dir($path)) exec("mkdir -m ".$permissions." ".$path);
        }
    } else {
        $dirs = split("/",$path);
        $path = "";
        foreach ($dirs as $key=>$dir) {
            $path .= $dir."/";
            if ($dir!="" && !file_exists($path)) mkdir($path, $permissions);
        }
    }
    return file_exists($path);
}
于 2013-03-19T19:40:52.763 に答える