エス技研

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


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

      2014/09/12

フォルダを指定しパーミッションを変更するプログラムを作ってみた

 

プログラムを作った経緯とプログラムソース

 
とあるサーバで、ファイルのパーミッションをまとめて変更したい、という必要性があり、プログラムを作成してみました。
 
大したものではないですが、せっかく作りましたので、もし他の人も何か参考になるのならばと思ってここにアップしてみることにしました。
 
——————

——————
 
 

サンプルソースの使い方

 
上記のソースプログラムを適当なファイル名のファイルにコピペして、サーバにアップして、そのファイルにアクセスすると下記のような画面が表示されます。
 
20140911_php_01
 
「フォルダ名」にフォルダ名を入力します。
相対パスで指定し、フォルダ名の最後に「/」は不要です。
 
「パーミッション」には指定したいパーミッションを入力します。
パーミッションの設定は「0755」「0666」など最初に「0」を付ける必要がありますが、その部分は自動付与しますので、入力は必要ありません。
 
「Chmod実行」ボタンをクリックすると、「フォルダ名」で指定したフォルダの中のファイルのパーミッションを「パーミッション」で指定したものに変更します。
 
フォルダのパーミッションは変更しません。
 
 

プログラムの解説

 
プログラムの解説、というほどたいそうな処理を書いているわけではありませんが、解説をしていきます。
 
35行目の「poendir」でフォルダを開いて、36行目の「readdir」で 1つずつのファイルを取得し、37行目で「.」「..」を排除し、39行目の「is_file」でファイルであることを確認(フォルダを排除)します。
42行目の「chmod」でパーミッションを変更します。
 
また、見ていただいて分かる通り、入力チェックは最低限しか行っていませんので、正しくない値を入れた場合は、想定外の不具合につながる可能性もあります。
 
さらに、サニタイジングも行っていませんので、使い終わったら速やかにプログラムファイルを削除しておく方がいいでしょう。
 
 

サンプルソースの注意点

 
このプログラムは想定通りの結果が得られない場合が多々あります。
下記のような場合は、サーバの設定によって実行できないものになりますので、あきらめるしかありません。
 
・chmod関数が使えない
chmod関数は、使い方を間違えるとサーバ全体に大きな影響を与えかねない関数であることから、これらの関数を利用できないようにしているサーバもあります。
 
・ファイルの権限が違う
サーバで動いているプログラムにはそれぞれ権限があり、FTPでアップロードしたファイルと、PHPのプログラムで生成されたファイルと、それぞれ違うユーザが割り当てられているサーバもあります。
その場合は、作成したユーザが違うためにプログラム上からパーミッションの変更ができない場合があります。
 
 
また、このプログラムは、パーミッションを変えるだけですが、設定に失敗するとシステム全体に大きな影響を与えてしまう可能性もありますので、まずは、テスト用のファイルで実験をしてみてください。
 
例えば、下記の様にフォルダとファイルを生成し、「test1」フォルダを指定して実験してみるとかテストファイルで試してみてください。
/test
/test/chmod_php.php
/test/test1/
/test/test1/01.txt
/test/test1/02.txt
/test/test1/03.txt
/test/test1/04.txt
/test/test1/05.txt
 
※「chmod_php.php」が上記サンプルのプログラムとします。

 - PHP・Smarty・ECCUBE

GoogleAdwords

GoogleAdwords

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

Message

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

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

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

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

  関連記事

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

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

複数銘柄を指定して株価チャートを一覧するツール公開

入力銘柄の5日間、3か月間、6か月間、1年間、2年間の株価チャートを一覧表示しますのでチャートで売買判断をするのに最適です。

PHPで1ヵ月前、先月、今月1日、来月末の日付などの算出はDateTimeImmutableを使う
PHPで1ヵ月前、先月、今月1日、来月末の日付などの算出はDateTimeImmutableを使う

PHPには日時をオブジェクトとして生成する関数「DateTimeImmutable」「DateTime」が用意されている。これを利用して1ヶ月後、月初日、月末日、5日後などを指定して日付を取得できる。

PHPで月末から1ヶ月後「+1 month」を算出すると想定する日付にならない場合がある
PHPで月末から1ヶ月後「+1 month」を算出すると想定する日付にならない場合がある

PHPでは月末の1ヶ月後が想定した日付にならない場合がある。原因はバグではなくPHPの1ヶ月後の定義によるもの。なので必要とする日付を定義しそれに合わせてDateTime、modifyを使用して算出方法を解説している。

ECCUBEを開発環境から本番ドメインに変更でエラーが・パス変更について

レンタルサーバでサーバ会社から割り当てられたURLで開発し、本番公開時にドメインを当てたらエラーが!そんな場合の対処方法の解説。対処方法は簡単ですが管理画面からは対応不可。

Smartyの修飾子regex_replaceで正規表現の後方参照・PHPではpreg_replace

ECCUBEで使われているSmartyで文字列を正規表現で置換し後方参照で値を利用する装飾子regex_replaceの解説です。細かな条件がありますので注意が必要です。

連想配列のキーも値もまとめてhtmlspecialchars()でサニタイズする関数の作成解説
連想配列のキーも値もまとめてhtmlspecialchars()でサニタイズする関数の作成解説

PHPの配列・連想配列のキーと値をまとめてhtmlspecialchars()関数でサニタイズ(無害化、無毒化)を行う関数を作成。連想配列のキーはarray_map()関数でのサニタイズは無理。

PHPでスクレイピング。phpQueryとphp-simple-html-dom-parserの比較と設置方法
PHPでスクレイピング。phpQueryとphp-simple-html-dom-parserの比較と設置方法

「PHP スクレイピング」で検索すると「phpQuery」ばかりヒットするが、10年以上も放置されている。なので今も開発が続いている「PHP Simple HTML DOM Parser」をオススメする。

ob_start、ob_get_contents関数でPHPの標準出力をバッファリング・変数に代入

標準出力をバッファリングし変数に代入することができるob_start()関数の解説。include()の処理をバッファリングすることで自由な場所に処理を記述することが可能。

PHPで配列の値をダブルクオーテーションで囲んでimplodeでカンマ区切りにする方法
PHPで配列の値をダブルクオーテーションで囲んでimplodeでカンマ区切りにする方法

PHPで配列の値を、preg_replace関数でクォーテーションで囲み、implode関数で「,(カンマ)」で区切ってテキスト化する方法。この方法であれば配列が空でも分岐の処理は必要なし!