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
この記事が参考になったと思いましたらソーシャルメディアで共有していただけると嬉しいです!
関連記事
-
-
WindowsのXAMPPのPHPではstrptimeは使用不可。代替はdate_parse_from_formatを使う
strptimeはWindowsのPHPには未実装。LinuxとMacで挙動が異なる。PHP8.1で非推奨になる。なので日付のチェックはdate_parse_from_formatを使おう。使い方を詳細解説。
-
-
SEO対策用タイトル、ディスクリプションの文字数カウントツール
SEO対策に使える文字数カウントツールで文字数の条件の説明も行っています。
-
-
ファイル変更だけ!ECCUBEの本番から開発環境をコピーする手順を解説
ECCUBEを本番から開発環境をコピーする際の手順を解説。PGMメンテに必要な開発環境を構築する手順を解説。ECCUBEの仕組みは簡単なので作業は5分ほど。
-
-
ECCUBE2.13.3で商品規格の在庫数が無制限から変更できないバグがある
2.13.3固有のバグである商品規格の在庫数の入力エリアがアクティブにならない不具合を解消する解説です。product_class.tplの2行を修正するだけの簡単対応です。
-
-
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 range関数を使って階乗と重複組み合わせを計算
PHPの range関数を使って階乗と重複組み合わせを計算し、それを元に乱数発生器を作成しました。
-
-
ECCUBEの新規追加ページがInternal Server Error・Not Foundに
ECCUBEで新規追加したページがInternal Server Errorに!原因はファイルのパーミッションの場合が多くその対処方法とプログラムの修正ポイントを解説。Not Foundも解説。
-
-
リダイレクトループが原因で「ERR_TOO_MANY_REDIRECTS」「このページを表示できません」が出たときの対策12事例+α
リダイレクトループ、自動転送設定ループの原因の解説とその対応方法を含め事例 12例を挙げて説明。
-
-
include、requireのパス指定をdirname(__FILE__)、__DIR__と書く理由
include、requireのパスの指定を dirname(__FILE__)、__DIR__で記述する理由に付いて解説。相対パス、絶対パスを直書き、パスを書かない場合は何が問題かを説明。
-
-
GMOペイメントゲートウェイのjava.io.IOExceptionのエラー
ECCUBEの決済でGMOペイメントゲートウェイのモジュールを使ってテスト決済を行った場合の不具合、java.io.IOExceptionと言うエラーの原因と対策方法の解説です。
Comment
まさに同じ問題で悩んでいましたので有り難かったです!
早めにこのページを見つけられて助かりました!
通りすがりのテスターさん、コメントありがとうございます。
お役に立てたということ、すごく嬉しいですね。書いた甲斐がありました!
作業をしていて自分が困ったことなどを中心に書いていますので、またの機会があれば、と思っています。
(またの機会、って事は、また困ることがあるって言うことなので、それがいいことなのかは分かりませんが....)