0

私はubuntuサーバーを持っています。私の目的は、ルート ディレクトリ内に ftp ユーザー用のディレクトリを作成することです (たとえば)、ftp ユーザーからいくつかのファイルを新しく作成したディレクトリにコピーします。

問題は、新しいディレクトリを作成できることですが、このディレクトリ内にファイルをコピーしようとしてもうまくいきません。

ファイルをローカル (ルート ディレクトリ) にコピーするスクリプトをテストしましたが、動作します。新しく作成したディレクトリのパーミッションを 0777 に変更しました。動作しますが、0775 では動作しません。コピーの例を 2 つ試しました。どちらも機能します。

新しく作成されたディレクトリの所有者ユーザー/グループは www-data (ルート アクセス権を持つ ubuntu サーバー) です。ディレクトリのパーミッションは 755 です。所有者をftpユーザーsureshに変更しても、うまくいきませんでした。

以下は私が使用したphpです:

<?php
//To create directory/subdirectory recursively

$mode = 0775; 
mkdir("./directory/subdirectory", $mode, TRUE);

//Source and destination
$source = "index.php";
$dest = "directory/index.php"

//Copy function first version
function stream_copy($src, $dest) 
    {
        $fsrc = fopen($src,'r');
        $fdest = fopen($dest,'w+');
        $len = stream_copy_to_stream($fsrc,$fdest); 
        fclose($fsrc);
        fclose($fdest);
        return $len; 
} 

if (!stream_copy($source,$dest)){
    echo "File stream copy to directory not successful! <br />";
} else {
    echo "Check the directory for index file! <br />";
}

//And I always get the "...not successful" output!

//Copy function second version
function copyemz($file1,$file2){
    $contentx =@file_get_contents($file1); 
    $openedfile = fopen($file2, "w"); 
    fwrite($openedfile, $contentx); 
    fclose($openedfile); 
    if ($contentx === FALSE) { 
    $status=false; 
} else $status=true;

    return $status; 
}

if (!copyemz($source,$dest)){
    echo "File copy to directory not successful <br />";
} else {
    echo "Check the directory for index!<br />";
}

//The same result for this either!

?>

最後に、shell_exec を試してみましたが、これも同じ結果になりました。これらはすべて、設定された条件で機能します

何が起こっているのか、何が欠けているのか誰でも説明できますか!

ftp (suresh) のユーザーは www-data のグループメンバーであり、その逆も同様です。(それが役立つ場合に限ります!それ以外の場合も試してみました。)

4

1 に答える 1

0

「./directory/subdirectory」を作成しますが、「directory/」にコピーします。「ディレクトリ」もwww-dataが所有していると確信していますか?

于 2013-06-19T09:34:46.677 に答える