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
この記事が参考になったと思いましたらソーシャルメディアで共有していただけると嬉しいです!
関連記事
-
-
Phpmailerでスパム回避!Gmail等のSMTPを経由するPHPのメールフォーム解説
お問い合わせ等のメールフォームから送ったメールがスパム扱いされる!その対策としてライブラリ「Phpmailer」を使う方法を解説。関数化していますのでコピペでOK。
-
-
include、requireのパス指定をdirname(__FILE__)、__DIR__と書く理由
include、requireのパスの指定を dirname(__FILE__)、__DIR__で記述する理由に付いて解説。相対パス、絶対パスを直書き、パスを書かない場合は何が問題かを説明。
-
-
PHPで正規表現の検証には preg_match_allが便利
PHPで正規表現の検証には preg_match_allが便利です。その便利さの使い方の解説です。
-
-
数値文字参照コード変換ツール(HTML特殊文字コード変換ツール)
テキストを数値文字参照コード(特殊文字コード)に変換するツール。テキストを数値文字参照コードに簡単変換。数値文字参照、文字実体参照、特殊文字などの違いも解説。
-
-
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分。コマンドの解説や引数の意味なども解説しているので役に立つはず。
-
-
Basic認証の.htaccess、.htpasswd生成ツールと解説
Basic認証を設定する際に必要となる.htaccess、.htpasswdファイルを生成するツール。ID、PASS、.htpasswdへのパスを入力することで編集する情報を生成します。
-
-
ECCUBE2.13.3で商品規格の在庫数が無制限から変更できないバグがある
2.13.3固有のバグである商品規格の在庫数の入力エリアがアクティブにならない不具合を解消する解説です。product_class.tplの2行を修正するだけの簡単対応です。
-
-
PHPのcURLでAPIやWebサイトへのアクセス方法。file_get_contentsとの比較
PHPからWebサイトにアクセスしてHTMLを取得、APIにアクセスして情報を取得する場合は、cURLがオススメ。file_get_contentsでも可能だがエラー制御に難がありトラブルのもとになる。
-
-
数値がMySQLのint(11)に保存できない!PHPの変数が本当にint型か確認!
PHPでintegerとdoubleが混在するような計算をする場合は要注意!計算結果が整数値であっても途中で使用する変数にdoubleの値が入っているときは計算結果がintegerではない場合があります。
-
-
ECCUBEの問い合わせフォームに任意の値を引数として渡す方法
ECCUBEのお問い合わせフォームに値を固有の情報を送りそれに基づいて処理をする方法を解説。ボタンの設置、受け取り側のテンプレート、プログラムのサンプルソースを提供。
Comment
まさに同じ問題で悩んでいましたので有り難かったです!
早めにこのページを見つけられて助かりました!
通りすがりのテスターさん、コメントありがとうございます。
お役に立てたということ、すごく嬉しいですね。書いた甲斐がありました!
作業をしていて自分が困ったことなどを中心に書いていますので、またの機会があれば、と思っています。
(またの機会、って事は、また困ることがあるって言うことなので、それがいいことなのかは分かりませんが....)