• このエントリーをはてなブックマークに追加

指定ファイルの権限を変更する

サンプルでは、指定したindex.htmlのファイルの権限を0777に変更する。これをすると、すべての権限が与えられることになる。所有者が変更できなかったり、あるいは、権限を変更できないときにはこれは使えないが、誤って権限を変更してしまっていて、PHPでなんとかできそうならば、このサンプルを使って誤って作ってしまった鬱陶しいファイルを削除するときには手っ取り早い解決方法として使える。

<?php
// アクセスした瞬間に指定したファイルの権限を変更する
$filename = 'index.html'; // ファイル名
chmod($filename, 0777);

// 権限を表示
echo substr(sprintf('%o', fileperms($filename)), -4);
?>

指定フォルダ(ディレクトリ)の中に配置されているファイルの権限を変更

サンプルでは、jpgファイルを指定フォルダから検出して、そのファイルを一つずつ0644に変更する。最後に処理を終了して終わる。

<?php
$targetDir = dir("dir/sample");

while ( ($targetFile = $targetDir->read()) !== false ) {
if ( substr_count( $targetFile, "jpg") > 0 ) {
chmod("blog/wp-content/uploads/" . $targetFile, 0644);
}
}
$targetDir->close();

exit();
?>

ファイルを配列として読み込む

指定した場所のファイルを読み込んで変数に代入するという処理。これを使えば、ファイル内のコードを使って処理を行える。配列で値は入るので、表示するときは1行ずつ処理することで、表示などが捗るforeachがおすすめ。取得したHTMLを加工して表示したり、ファイルを保存すると、データの加工が可能となり可能性が広がる。

<?php
// htmlとして表示されたサイトのコードを代入する
$html_source = file('http://www.example.com/');

// foreachで回せば、行番号をつけることも可能
// htmlspecialcharsで処理することで、HTMLタグをソースコード表示で確認できる
foreach ( $html_source as $line_num => $line) {
	echo '<b>' . ($line_num + 1) . '</b>: ' . htmlspecialchars($line) . "<br>\n";
}

// foreachで、htmlをそのまま表示すると以下の通り
foreach ( $html_source as $line_num => $line) {
	echo $line;
}

// 相対パスでも取得可能
$html_source = file('index.html');
?>

ファイルを文字列として読み込む

ファイルを配列で読み込まずに、そのまま利用したいなというときには、ファイルを文字列として取得できる関数もある。それを使えば、外部ファイルなどに配置されたパーツを取り込むことができる。PHPとして処理したいときは、require_once・includeがおすすめ。

<?php
$file_contents = var_dump( file_get_contents('index.html') );
echo $file_contents;
?>

文字化け

文字コードが違うと文字化けする。文字化けしたまま表示することを防ぐために、表示前に取得した文字列をエンコードする事ができる。

WordPressの固定ページのNewsをパーツとして差し込むサンプル

<?php
// WordPressの固定ページのNewsをパーツとして差し込むサンプル Shift_JISに変換
$yum_works_new_list = file_get_contents('http://example.com/blog/news/');
echo mb_convert_encoding($yum_works_new_list, 'Shift_JIS', 'UTF-8');
?>

文字コードの異なるヘッダーを別の場所に差し込むサンプル

<?php
// header
$yum_header = file_get_contents('http://example.com/inc/header.php');
echo mb_convert_encoding($yum_header, 'euc-jp', 'UTF-8');
?>