-1

私の問題は、Linuxでディレクトリを作成することです。私のウェブサイトには、サイトの画像をアップロードできるバックエンドがあり、画像がアップロードされた年と月に応じてフォルダーが自動的に作成されます。

しかし、Web ホスト プラットフォームの Windows を Linux に変更すると、エラーが発生しました。画像を正常にアップロードできますが、アップロード時に表示できません。

バックエンド (管理パネル) から名前を付けて画像をアップロードすると、pdf.png何も表示されず、画像が2012\09\pdf.pngWeb サイトのアップロード フォルダーにアップロードされていることがわかります。しかし、このアップロードされたファイルを自分の/2012/09/フォルダーに入れたいです。フォルダは年月に応じて自動的に作成されました。

エラーのスクリーン ショットと私の php プログラムのソース コード (ZIP)を見つけてください。

    function upload()
    {
    $a = $this->_make_dir();       
    if(move_uploaded_file($a["tmpname"], $a["target"]))
    {
        echo 'success';
        $this->art_media->create(array("media_filename"=>$a["file"],
            "media_date"=>time(),
            "media_title"=>$a["file"],
            "media_description"=>"",
            "media_filelink"=>date("Y")."/".date("m")."/",
            "media_isimage"=>false,
            "media_type"=>$a["filetype"]
            ));

    } 
    else
    {
        echo 'failed';
    }
}
function _make_dir()
{
    $target1 = FCPATH.$this->config->item("articles_media").date("Y");
    $target = $target1."\\".date("m");

    $uploadfile = $_FILES["Filedata"]["name"];
    $type = $_FILES["Filedata"]["type"];
    if(!is_dir($target1))
    {
        mkdir($target1);
        mkdir($target);
    }
    else
    {
        if(!is_dir($target))
        {
            mkdir($target);
        }
    }        
    if(is_file($target."\\".$uploadfile)==true)
    {
        echo 'duplicate';
        exit();
         //$uploadfile = $uploadfile."_".$n;
    }
    return array("filetype"=>$type,"file"=>$uploadfile,"targetpath"=>$target."\\","target"=>$target."\\".$uploadfile,"tmpname"=>$_FILES['Filedata']['tmp_name']);
}
4

1 に答える 1

0

Windows と Linux では、ディレクトリのトラバースの動作が異なります。Windows ではバックスラッシュが使用されますが、Linux ではスラッシュが使用されます。

エスケープされたすべてのバックスラッシュをスラッシュに置き換える必要があります。たとえば、これは次のとおりです。

$target = $target1."\\".date("m");

なる必要があります:

$target = $target1."/".date("m");
于 2012-09-19T09:23:42.767 に答える