私は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 のグループメンバーであり、その逆も同様です。(それが役立つ場合に限ります!それ以外の場合も試してみました。)