にっきダイアリー

はてなダイアリーからはてなblogに移動してみました。

パーミッション変更スクリプト

PHP がセーフモードで動いてるサーバーとか、FTP ユーザーと PHP 実行ユーザーが違うサーバーとかで、ファイルアップロード可能なPHPスクリプト動かしてFTPで削除できないファイルができてしまった時に使うスクリプト

30分もかからず作れる代物だけど、作って使って捨てると何年かおきに自作する羽目になって面倒くさいので、今回は後から探しやすい場所にバックアップ。

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html lang="ja">
<head>
	<meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS">
	<meta name="ROBOTS" content="NOINDEX,NOFOLLOW,NOARCHIVE"> 
	<!-- 入り口 -->
	<title>CHMOD 0666</title>
</head>
<body>
<h1>CHMOD 0666</h1>

<?php
// カレントディレクトリにあるファイルのパーミッションを 666 に変更してみる
// サブディレクトリには対応してない。今の所

define("CDIR", './');
define("CHG_EXT", 'jpg,gif,png,zip,htm'); // 変更を試みるファイルの拡張子
echo '<p>変換するファイルの拡張子: '.CHG_EXT."</p><p>\n";
$exts =  array_flip(explode(',',CHG_EXT));
$dp = opendir(CDIR);
if($dp){
	while (false !== ($file = readdir($dp))) {
		$p = pathinfo($file);
		$ext = $p['extension'];
		if(isset($exts[$ext])){
			$s = stat(CDIR.$file);
			$owner = $s[4];
			$group = $s[5];
			$perm = sprintf('%04o', fileperms(CDIR.$file), -4);
			
			// 元のパーミッション表示して、変換するかどうかを表示して
			echo "$file --- $owner : $group : $perm try chmod 0666 ";
			//変換したら成功したパーミッションを表示しよう。
			$ret = chmod(CDIR.$file, 0666);
			if($ret){
				echo "Success!!<br>\n";
			}
			else{
				echo "Failed!!<br>\n";
			}
		}
	}
	closedir($dp);
	echo "</p>\n";
}
else{
	echo "<p>ディレクトリが開けなかったようです</p>";
}
?>

</body>
</html>