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
この記事が参考になったと思いましたらソーシャルメディアで共有していただけると嬉しいです!
関連記事
-
-
PHPで APIにアクセスする際などに使用する cURLのサンプルプログラム
PHPのcURLを使用して各種APIにアクセスするサンプルプログラムを作成し、その処理を解説。カオナビAPIのみならず、他の多くのAPIにアクセスする際にも使用できる。
-
-
Basic認証の.htaccess、.htpasswd生成ツールと解説
Basic認証を設定する際に必要となる.htaccess、.htpasswdファイルを生成するツール。ID、PASS、.htpasswdへのパスを入力することで編集する情報を生成します。
-
-
配列の値をテキスト表示する際に「、」でつなげるときの処理方法の一例
配列の値を「、」でつないで出力する際、単純にforeachで繰り返し処理をすると「イヌ、サル、キジ、」となるが文字列最後の「、」を出力しない方法を3つ解説している。
-
-
数値文字参照コード変換ツール(HTML特殊文字コード変換ツール)
テキストを数値文字参照コード(特殊文字コード)に変換するツール。テキストを数値文字参照コードに簡単変換。数値文字参照、文字実体参照、特殊文字などの違いも解説。
-
-
WindowsのXAMPPのPHPではstrptimeは使用不可。代替はdate_parse_from_formatを使う
strptimeはWindowsのPHPには未実装。LinuxとMacで挙動が異なる。PHP8.1で非推奨になる。なので日付のチェックはdate_parse_from_formatを使おう。使い方を詳細解説。
-
-
ECCUBEでカード決済NGの受注情報をマイページ購入履歴に表示しない方法解説
ECCUBEでカード決済に失敗しても購入履歴一覧に注文情報(受注情報)が表示される問題への対処方法を解説。受注情報レコードの作成の流れとステイタスについても解説。
-
-
ECCUBEでテンプレートファイルのファイルサイズは10MB以下のものを使用してくださいのエラーが出た場合
テンプレートをアップロードする際にファイルサイズが大きすぎてエラーが表示される際の対処方法解説。パラメータ設定で設定する制限について解説を行っています。
-
-
PHPで月末から1ヶ月後「+1 month」を算出すると想定する日付にならない場合がある
PHPでは月末の1ヶ月後が想定した日付にならない場合がある。原因はバグではなくPHPの1ヶ月後の定義によるもの。なので必要とする日付を定義しそれに合わせてDateTime、modifyを使用して算出方法を解説している。
-
-
PHPのcURLでAPIやWebサイトへのアクセス方法。file_get_contentsとの比較
PHPからWebサイトにアクセスしてHTMLを取得、APIにアクセスして情報を取得する場合は、cURLがオススメ。file_get_contentsでも可能だがエラー制御に難がありトラブルのもとになる。
-
-
ファイル変更だけ!ECCUBEの本番から開発環境をコピーする手順を解説
ECCUBEを本番から開発環境をコピーする際の手順を解説。PGMメンテに必要な開発環境を構築する手順を解説。ECCUBEの仕組みは簡単なので作業は5分ほど。
Comment
まさに同じ問題で悩んでいましたので有り難かったです!
早めにこのページを見つけられて助かりました!
通りすがりのテスターさん、コメントありがとうございます。
お役に立てたということ、すごく嬉しいですね。書いた甲斐がありました!
作業をしていて自分が困ったことなどを中心に書いていますので、またの機会があれば、と思っています。
(またの機会、って事は、また困ることがあるって言うことなので、それがいいことなのかは分かりませんが....)