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
この記事が参考になったと思いましたらソーシャルメディアで共有していただけると嬉しいです!
関連記事
-
-
JSON形式の値を配列形式に変換・PHPでは json_decode()、json_encode()
JSONとは「JavaScript Object Notation」の略でテキストベースのデータフォーマット。JSONの値をPHPで配列に変換するWebツールの紹介とその処理「json_encode()」「json_decode()」関数の解説。
-
-
PHP画面が真っ白 header(“Location: $url”);
PHPの開発で header(“Location: $url”);を使うと画面が真っ白になる不具合が出る場合もあります。
-
-
ECCUBEを開発環境から本番ドメインに変更でエラーが・パス変更について
レンタルサーバでサーバ会社から割り当てられたURLで開発し、本番公開時にドメインを当てたらエラーが!そんな場合の対処方法の解説。対処方法は簡単ですが管理画面からは対応不可。
-
-
Smartyの修飾子regex_replaceで正規表現の後方参照・PHPではpreg_replace
ECCUBEで使われているSmartyで文字列を正規表現で置換し後方参照で値を利用する装飾子regex_replaceの解説です。細かな条件がありますので注意が必要です。
-
-
PHPのcURLでAPIやWebサイトへのアクセス方法。file_get_contentsとの比較
PHPからWebサイトにアクセスしてHTMLを取得、APIにアクセスして情報を取得する場合は、cURLがオススメ。file_get_contentsでも可能だがエラー制御に難がありトラブルのもとになる。
-
-
ECCUBE2.13.3で商品規格の在庫数が無制限から変更できないバグがある
2.13.3固有のバグである商品規格の在庫数の入力エリアがアクティブにならない不具合を解消する解説です。product_class.tplの2行を修正するだけの簡単対応です。
-
-
AdminerはphpMyAdmin代替のデータベース管理ツール
AdminerはphpMyAdminとほぼ同機能のデータベース管理ツール。PHP 1ファイルのため設置が非常に簡単で軽快に動作し、phpMyAdminの置き換えで使うのも問題なし。
-
-
リダイレクトループが原因で「ERR_TOO_MANY_REDIRECTS」「このページを表示できません」が出たときの対策12事例+α
リダイレクトループ、自動転送設定ループの原因の解説とその対応方法を含め事例 12例を挙げて説明。
-
-
Phpmailerでスパム回避!Gmail等のSMTPを経由するPHPのメールフォーム解説
お問い合わせ等のメールフォームから送ったメールがスパム扱いされる!その対策としてライブラリ「Phpmailer」を使う方法を解説。関数化していますのでコピペでOK。
-
-
sleepの秒指定は整数のみなので1.5秒はsleep、usleepを組み合わせる
PHPのプログラム処理を遅延させる「sleep()」は整数秒単位。「usleep()」は1秒未満のマイクロ秒単位。では「1.5」秒はどう表現するのか。「sleep()」「usleep()」を組み合わせる。その解説。
Comment
まさに同じ問題で悩んでいましたので有り難かったです!
早めにこのページを見つけられて助かりました!
通りすがりのテスターさん、コメントありがとうございます。
お役に立てたということ、すごく嬉しいですね。書いた甲斐がありました!
作業をしていて自分が困ったことなどを中心に書いていますので、またの機会があれば、と思っています。
(またの機会、って事は、また困ることがあるって言うことなので、それがいいことなのかは分かりませんが....)