エス技研

WordPress、CakePHP、PHP、baserCMSなどの Web系システムを中心に情報を提供します!


PHPパーミッション変更のchmod関数・モードを変数で指定する方法

      2014/11/03

chmodの第二引数は 8進数で指定する

 

chmod関数のパーミッションの値に変数を使う場合の対処方法

 
ファイル、フォルダのパーミッションを変更する PHPの関数、chmod関数において、パーミッションの値を変数にして実行しようとするとうまくいかない!?
そんなときの対処方法についての説明です。
 
 
具体的には下記のように、8進数に変換する octdec関数を利用します。
 

$perm_num = 755;

// 数値を 0付の 4桁数値にする
$perm     = sprintf ( "%04d", $perm_num );

// 10進数を 8進数に変換して chmod関数の引数に編集する
chmod ( "./test.php", octdec ( $perm ) );

 
 

chmod関数と octdec関数の解説

 

chmod関数

 
chmod関数は、「$filename」で指定したファイルやフォルダのパーミッション(属性)を「$mode」で指定したものに変更します。
ファイルもフォルダも特に区別することなく指定してパーミッションを変更することができます。
 

bool chmod ( string $filename , int $mode )

 
ここで注意が必要なのが、「$mode」は 8進数の数値で指定する必要がある点です。
 
パーミッションを「755」に指定したい場合は、下記のように指定をします。
 
【サンプルソース】

【正しい】
chmod ( "./test.php", 0755 );

【間違い】
chmod ( "./test.php", 755 );
chmod ( "./test.php", "0755" );

 
そして、単純に「0755」の部分を変数に変更するだけの下記のような書き方では、「$perm」は 10進数となっているためにそのまま指定しても正常には動きません。
 

$perm_num = 755;
$perm     = sprintf ( "%04d", $perm_num );
chmod ( $val, $perm ) {

 
そのため、そのため octdec関数で 8進数に変更する必要があります。
 
 

octdec関数

 
octdec関数は、下記の様に「$number」で指定した 10進数の数値を 8進数に変換します。
 

string decoct ( int $number )

 
 
【サンプルソース】

echo decoct ( 8 );

 
 

この記事を書いた経緯

 
この記事は「パーミッション(属性)一括変更ツール・WordPress最適化済」を作成する際に、chmodの第二引数をどうやって与えればいいのか、というところで一番悩みまして、しかもあまり情報がなかったこともありまして、同じ悩みに行き当たった方の参考になれば、と思って書きました。
 
解決の糸口につながれば幸いです。
 
 
ちなみに、「パーミッション一括変更ツール(WordPress最適化済)」は、WordPressのファイルのパーミッションを一括して変換するツールです。
 「パーミッション一括変更ツール(WordPress最適化済)」のダウンロードサイトは左のリンク先から。

 - PHP・Smarty・ECCUBE

最後までお読みいただきましてありがとうございます。
この記事が参考になったと思いましたらソーシャルメディアで共有していただけると嬉しいです!

Comment

  1. 通りすがりのテスター より:

    まさに同じ問題で悩んでいましたので有り難かったです!
    早めにこのページを見つけられて助かりました!

    • エス技研 より:

      通りすがりのテスターさん、コメントありがとうございます。
      お役に立てたということ、すごく嬉しいですね。書いた甲斐がありました!
       
      作業をしていて自分が困ったことなどを中心に書いていますので、またの機会があれば、と思っています。
      (またの機会、って事は、また困ることがあるって言うことなので、それがいいことなのかは分かりませんが....)

Message

メールアドレスが公開されることはありません。 ※ が付いている欄は必須項目です

下記の空欄を埋めてください。 * Time limit is exhausted. Please reload CAPTCHA.

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

※入力いただいたコメントは管理者の承認後に掲載されます。

  関連記事

フォルダを指定してファイルのパーミッションを変更するプログラム

フォームからフォルダ、パーミッションを指定しパーミッションを変更するサンプルプログラムの解説です。

cURLを利用する際の注意点「&」があるURLは「"」で囲む
cURLを利用する際の注意点「&」があるURLは「”」で囲む

cURLでURLはダブルクォーテーションで囲む。LinuxでもWindowsでもコマンドでは「&」は意味を持つ文字のためエラー原因になる。クォーテーションは常につけておく方が無難。

PHPのデバッグで使う print_r、var_dump、var_exportの動作の違い
PHPのデバッグで使う print_r、var_dump、var_exportの動作の違い

PHPのデバッグ等で変数や配列の中身を確認するために使用する関数print_r、var_dump、var_exportの動作の違い、仕様の違いについて確認した。var_exportがオススメ。

PHPで特定の日間の日付を for、strtotimeで表示する

ある特定の間の日付の情報を for文、strtotimeを使って作成し、その解説をしています。

JSON形式の値を配列形式に変換・PHPでは json_decode()、json_encode()
JSON形式の値を配列形式に変換・PHPでは json_decode()、json_encode()

JSONとは「JavaScript Object Notation」の略でテキストベースのデータフォーマット。JSONの値をPHPで配列に変換するWebツールの紹介とその処理「json_encode()」「json_decode()」関数の解説。

CentOS6、7のPHPを5.3から5.6、7.0、7.1にバージョンアップする手順の解説
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のソースで見慣れない記号が出てきた・アロー演算子(->)、ダブルアロー演算子(=>)

PHPのプログラムソースには見慣れない記号が出てきます。その意味や調べ方です。

QRコード(二次元バーコード)作成サービスを公開
QRコード(二次元バーコード)作成サービスを公開

QRコード(二次元バーコード)を生成するサービス。QRコードにする文字列を入力するだけで QRコードが簡単に作れる。オプションとして、画像サイズ、余白サイズ、エラー訂正レベルがある。

PHPで APIにアクセスする際などに使用する cURLのサンプルプログラム
PHPで APIにアクセスする際などに使用する cURLのサンプルプログラム

PHPのcURLを使用して各種APIにアクセスするサンプルプログラムを作成し、その処理を解説。カオナビAPIのみならず、他の多くのAPIにアクセスする際にも使用できる。

ECCUBEでカード決済NGの受注情報をマイページ購入履歴に表示しない方法解説

ECCUBEでカード決済に失敗しても購入履歴一覧に注文情報(受注情報)が表示される問題への対処方法を解説。受注情報レコードの作成の流れとステイタスについても解説。