PHPパーミッション変更のchmod関数・モードを変数で指定する方法
2014/11/03
chmodの第二引数は 8進数で指定する
chmod関数のパーミッションの値に変数を使う場合の対処方法
ファイル、フォルダのパーミッションを変更する PHPの関数、chmod関数において、パーミッションの値を変数にして実行しようとするとうまくいかない!?
そんなときの対処方法についての説明です。
具体的には下記のように、8進数に変換する octdec関数を利用します。
1 2 3 4 5 6 7 |
$perm_num = 755; // 数値を 0付の 4桁数値にする $perm = sprintf ( "%04d", $perm_num ); // 10進数を 8進数に変換して chmod関数の引数に編集する chmod ( "./test.php", octdec ( $perm ) ); |
chmod関数と octdec関数の解説
chmod関数
chmod関数は、「$filename」で指定したファイルやフォルダのパーミッション(属性)を「$mode」で指定したものに変更します。
ファイルもフォルダも特に区別することなく指定してパーミッションを変更することができます。
1 |
bool chmod ( string $filename , int $mode ) |
ここで注意が必要なのが、「$mode」は 8進数の数値で指定する必要がある点です。
パーミッションを「755」に指定したい場合は、下記のように指定をします。
【サンプルソース】
1 2 3 4 5 6 |
【正しい】 chmod ( "./test.php", 0755 ); 【間違い】 chmod ( "./test.php", 755 ); chmod ( "./test.php", "0755" ); |
そして、単純に「0755」の部分を変数に変更するだけの下記のような書き方では、「$perm」は 10進数となっているためにそのまま指定しても正常には動きません。
1 2 3 |
$perm_num = 755; $perm = sprintf ( "%04d", $perm_num ); chmod ( $val, $perm ) { |
そのため、そのため octdec関数で 8進数に変更する必要があります。
octdec関数
octdec関数は、下記の様に「$number」で指定した 10進数の数値を 8進数に変換します。
1 |
string decoct ( int $number ) |
【サンプルソース】
1 |
echo decoct ( 8 ); |
この記事を書いた経緯
この記事は「パーミッション(属性)一括変更ツール・WordPress最適化済」を作成する際に、chmodの第二引数をどうやって与えればいいのか、というところで一番悩みまして、しかもあまり情報がなかったこともありまして、同じ悩みに行き当たった方の参考になれば、と思って書きました。
解決の糸口につながれば幸いです。
ちなみに、「パーミッション一括変更ツール(WordPress最適化済)」は、WordPressのファイルのパーミッションを一括して変換するツールです。
「パーミッション一括変更ツール(WordPress最適化済)」のダウンロードサイトは左のリンク先から。
GoogleAdwords
GoogleAdwords
この記事が参考になったと思いましたらソーシャルメディアで共有していただけると嬉しいです!
関連記事
-
-
Smartyの修飾子regex_replaceで正規表現の後方参照・PHPではpreg_replace
ECCUBEで使われているSmartyで文字列を正規表現で置換し後方参照で値を利用する装飾子regex_replaceの解説です。細かな条件がありますので注意が必要です。
-
-
PHP range関数を使って階乗と重複組み合わせを計算
PHPの range関数を使って階乗と重複組み合わせを計算し、それを元に乱数発生器を作成しました。
-
-
QRコード(二次元バーコード)作成サービスを公開
QRコード(二次元バーコード)を生成するサービス。QRコードにする文字列を入力するだけで QRコードが簡単に作れる。オプションとして、画像サイズ、余白サイズ、エラー訂正レベルがある。
-
-
PHPのcURLでAPIやWebサイトへのアクセス方法。file_get_contentsとの比較
PHPからWebサイトにアクセスしてHTMLを取得、APIにアクセスして情報を取得する場合は、cURLがオススメ。file_get_contentsでも可能だがエラー制御に難がありトラブルのもとになる。
-
-
指定した数で文字列を丸める(n文字目で…にする)関数substr、mb_substr、mb_strimwidthの違い
文字列を指定された数で抜き出すPHPの関数、substr、mb_substr、mb_strimwidthについての解説。似た関数だが引数の指定方法が違ったり、文字数がバイト数か文字数かも違ったり、注意が必要だ。
-
-
GMOペイメントゲートウェイのjava.io.IOExceptionのエラー
ECCUBEの決済でGMOペイメントゲートウェイのモジュールを使ってテスト決済を行った場合の不具合、java.io.IOExceptionと言うエラーの原因と対策方法の解説です。
-
-
CentOS6、7のPHPを5.3から5.6、7.0、7.1にバージョンアップする手順の解説
CentOS6系、7系のPHPバージョンを5.3から5.6、7.0、7.1にアップする作業手順と解説。yum updateコマンドを使い作業時間は約10分。コマンドの解説や引数の意味なども解説しているので役に立つはず。
-
-
PHPで配列の値をダブルクオーテーションで囲んでimplodeでカンマ区切りにする方法
PHPで配列の値を、preg_replace関数でクォーテーションで囲み、implode関数で「,(カンマ)」で区切ってテキスト化する方法。この方法であれば配列が空でも分岐の処理は必要なし!
-
-
Basic認証の.htaccess、.htpasswd生成ツールと解説
Basic認証を設定する際に必要となる.htaccess、.htpasswdファイルを生成するツール。ID、PASS、.htpasswdへのパスを入力することで編集する情報を生成します。
-
-
リダイレクトループが原因で「ERR_TOO_MANY_REDIRECTS」「このページを表示できません」が出たときの対策12事例+α
リダイレクトループ、自動転送設定ループの原因の解説とその対応方法を含め事例 12例を挙げて説明。
Comment
まさに同じ問題で悩んでいましたので有り難かったです!
早めにこのページを見つけられて助かりました!
通りすがりのテスターさん、コメントありがとうございます。
お役に立てたということ、すごく嬉しいですね。書いた甲斐がありました!
作業をしていて自分が困ったことなどを中心に書いていますので、またの機会があれば、と思っています。
(またの機会、って事は、また困ることがあるって言うことなので、それがいいことなのかは分かりませんが....)