2011年4月27日水曜日

【PHPセキュリティ関連】ファイルアップロードのサイズ制限について

お疲れ様です。
少しハマりましたので備忘録です。

PHPにおいてファイルをアップロードする際
ファイルの容量がphp.ini(設定ファイル)で決められています。
初期状態だと2Mだそうです。

変更する場合は
php.iniを直接編集することになりますが
レンタルサーバーなどの場合
変更が容易でないことがあります。

私はさくらインターネットを愛用(会社が)しています。
さくらインターネットはコントロールパネルから
php.iniの変更が可能ですので
好きなサイズに変更が可能です。

例)
upload_max_filesize = 5M

こんな感じです。
あまり大きすぎると
いろいろ問題がありそうなので
こういう設定も可能だという程度でいいかと思います。

以上

2011年4月19日火曜日

【CakePHP関連】hiddenメソッドについて

何回も調べなおすので備忘録します。

Formヘルパーのhiddenメソッドについて。

$form->hidden('User.id',array('value'=>3));

こんな感じで使います。

以上

【CakePHP関連】PHPExcelのセル関数絡み

お疲れ様です。

PHPExcelのセルに値をセットする関数で
いい情報が載っていたので
備忘録します。


// セルに値をセットする
$sheet->setCellValueByColumnAndRow(0, 1, "文字列!");
$sheet->setCellValueByColumnAndRow(1, 2, 12345);
$sheet->setCellValueByColumnAndRow(2, 3, true);
$sheet->setCellValueByColumnAndRow(3, 4, date("Y/m/d"));

参考サイト:
誰かのホームページ様
http://www.24w.jp/study_contents.php?bid=php&iid=phpexcel&sid=cell&cid=005

ありがとうございます

以上

【CakePHP関連】PHPExcelを利用する方法

お疲れ様です。

PHPExcelというphpでExcelファイルを生成するライブラリがあります。
それをCakePHPで実装する方法をご紹介します。

環境

cakephp:1.2.10
PHPExcel:1.7.6

フォルダ構成
add/vendorsの中にphpexcelフォルダを生成し、その中にダウンロードした
PHPExcelファイル群をアップロードし、phpexcel.phpを新規に作成します。

app
└vendors
  └phpexcel(新規フォルダ)
      └Classes
      └Documentation
      └Tests
      └changelog.txt
      └install.txt
      └license.txt
      └phpexcel.php(オリジナルファイル)

わかりづらいですが、こんな感じです。

また、予めテンプレートExcelファイルをアップロードします。
場所はapp/webroot/tmpフォルダ内です。
tmpフォルダがない場合は、新規に作成します。
テンプレートExcelファイル名は「template.xls」となります。

続いてオリジナルファイルの中身です。

<?php

ini_set('include_path', get_include_path() . PATH_SEPARATOR . VENDORS. "phpexcel" . DS . "Classes");

require_once 'Classes/PHPExcel.php';

require_once 'Classes/PHPExcel/IOFactory.php';

?>

ここで、Classes中のPHPExcel.phpと、PHPExcel内のIOFactory.phpを呼び出します。

最後にコントローラーの記述です。


<?php

//PHPExcleの読み込み
require_once '../vendors/phpexcel/phpexcel.php';


class TestsController extends AppController {

public $name = 'Tests';
public $uses = 'Tests';

function dailies_report_download(){

$this->autoRender = false; // Viewを使わない
Configure::write('debug', 0); // debugコードを出さない

//Templateを読み込んで、PHPExcelオブジェクトの生成
$reader = PHPExcel_IOFactory::createReader('Excel5');
$xl = $reader->load('tmp/template.xls');

//シートの設定
$xl->setActiveSheetIndex(0);
$sheet = $xl->getActiveSheet();

//セルの値を設定
$sheet->setCellValue('b3', 'b3のセルに値が入る');
$sheet->setCellValue('b4', 'b4のセルに値が入る');
$sheet->setCellValue('c8', 'c8のセルに値が入る');
$sheet->setCellValue('e8', 'e8のセルに値が入る');

//画像用のオプジェクト作成
$objDrawing = new PHPExcel_Worksheet_Drawing();
$objDrawing->setPath('../webroot/img/Tests/Test.png');///貼り付ける画像のパスを指定
$objDrawing->setHeight(210);////画像の高さを指定

///画像のプロパティを見たときに表示される情報を設定
$objDrawing->setName('Test');////ファイル名
$objDrawing->setDescription('Test画像');////画像の概要
$objDrawing->setCoordinates('B14');///位置
$objDrawing->setOffsetX(50);////横方向へ何ピクセルずらすかを指定
$objDrawing->getShadow()->setVisible(true);////ドロップシャドウをつけるかどうか。

///PHPExcelオブジェクトに張り込み
$objDrawing->setWorksheet($sheet);

//スタイルの設定(標準フォント、罫線、中央揃え)
$sheet->getDefaultStyle()->getFont()->setName('MS Pゴシック');
$sheet->getDefaultStyle()->getFont()->setSize(11);
$sheet->getStyle('b3')->getBorders()->getBottom()->setBorderStyle(PHPExcel_Style_Border::BORDER_THIN);

//Excel95形式で保存
$writer = PHPExcel_IOFactory::createWriter($xl, 'Excel5');
  //tmpフォルダ内にExcelファイルが保存される
$writer->save("tmp/output.xls");

/*
* 95-2003形式でダウンロード
*/
  //ダウンロードされるExcelファイルの名前を指定
header ("Content-disposition: attachment; filename=test.xls");
header ("Content-type: application/octet-stream; name=test.xls");

//tmpフォルダに保存されているExcelファイルをダウンロード
$out = file_get_contents("tmp/output.xls");
return($out);
}
}
?>

以上です。

2011年4月7日木曜日

【Joomla1.5系関連】サイト内検索の結果表示のフォームをカスタマイズするには

お疲れ様です。

タイトルの件で備忘録します。

以前紹介したスタンダードカテゴリレイアウトと同様なイメージでカスタマイズが可能です。

まずファイルの格納場所ですが。。。

ルートフォルダ/components/com_search/views/search/tmplの
default_form.phpです。

あとはじっくり眺めれば、大体わかります(笑)

以上

【Joomla1.5系関連】メニューアイテムのスタンダードカテゴリレイアウトをカスタマイズするには

お疲れ様です。

タイトルの件ですが、今回いじる必要があったので備忘録します。
まず、スタンダードカテゴリレイアウトを生成しているphpファイルの在り処は・・・

ルートフォルダ/components/com_content/views/category/teplの

default_items.phpです

結構長いソースですが、じっくり眺めればたいていわかります(笑)

以上

2011年4月6日水曜日

【PHPセキュリティ関連】ファイルアップロード攻撃について

お疲れ様です。

今回はセキュリティについて備忘録します。
PHPをコーティングしていくうえで、いろいろなセキュリティ対策を行なうかと
思いますが、今回はファイルアップロード攻撃についてです。

ファイルアップロード攻撃とは
「ファイルをサーバー上にアップロードした後、アップロードしたファイルにアクセスしてPHPコードやJavascriptを実行する」
攻撃です。


サーバー上で、任意のコードが実行出来てしまうので結構危険です。

対策としては

・ファイルをアップロードするフォルダを公開フォルダの外にする。
・アップされるファイル名をランダムにする
・転送スクリプトを書く

などがあるみたいです。

下記参考サイトに非常に分かりやすく記載があります。

参考サイト:http://d.hatena.ne.jp/owa-tayo/20100129/1264714595
owa-tayo初心技術者の玉手箱様 ありがとうございます。

以上

2011年4月5日火曜日

【PHP関連】mb_send_mail()関数の文字化けについて

お疲れ様です。
最近更新をサボっています・・・

いろいろと備忘録するネタはあるんですが
書くのを面倒くさがっています。
新年度になりましたので、気を引き締めていきたいと思います。

さて、件名の件で備忘録します。
非常に便利なメール送信関数のmb_send_mail()関数ですが
文字化けしましたので、その時の対処を備忘録します。

原因は
PHPのスクリプトを書いている文字コードと、そのPHPスクリプトを動作させるサーバーのデフォルトの文字コード設定の相違らしいです。

なので下記コードを追加すると解決しました。

カレントの言語を日本語に設定する
mb_language("ja");
内部文字エンコードを設定する
mb_internal_encoding("UTF-8");

この後にmb_send_mail()関数を実行します。

以上