PHPサンプル

更新:

PHPの基本事項。

データベースの接続と文字コード
	・MySQL
		$connect = mysql_connect($db_host, $db_username, $db_password);
		mysql_query("set names 'utf8'", $connect);
		$sqlid = mysql_query($query, $connect);
		$result = mysql_num_rows($sqlid);
	・PostgreSQL
		$connect = pg_connect("dbname=$db_service user=$db_username");
		pg_query($connect, "set names 'utf8'");
		$sqlid = pg_query($connect, $query);
		$result = pg_num_rows($sqlid);
	・その他
		mysql_set_charset('utf8');
		というのもある。

■日付
	・現在の日付取得
		$updatedate = date("Y-m-d H:i:s");
	・日付が正しいかチェック
	 正しければtrue、存在しない日付ならfalse
		checkdate($month, $day, $year);
	・日付の書式をタイムスタンプにする
		2005-09-24T00:00:00などの日付を1127487600という数値(タイムスタンプ)に変換する
		・例
			strtotime("2005-09-24T00:00:00+09:00");
			strtotime("Thu, 21 Jul 2005 14:46:19 +0900");
		・例
			取得した日付の書式が違っても、一度タイムスタンプに変更し、任意の書式に変更できる
			$date2 = date("Y-m-d H:i:s", strtotime($date));

■エラー出力回避(エラーメッセージを出さない)
	・error_reporting
		0だとエラー非表示になる
		それ以外だと数字に応じてエラーがメッセージが異なる
			error_reporting(0);
	・関数、変数などの前に@マークをつける
			@fopen($test, "r");

■スリープ、処理を意図的に遅延させる
	・sleep(秒数);
		sleep(5);
	・usleep(マイクロ秒数);

■ループの強制終了、タイムアウト時間
	・set_time_limit(秒数)
		set_time_limit(90);

■ブラウザを閉じても処理を続行する
	・ignore_user_abort()
		戻り値は、現在の設定値。0か1。
	・通信が切れても処理を続ける
		ignore_user_abort(1);
	・通信が切れたら処理が中断される
		ignore_user_abort(0);

■コマンドを実行する
	・exec(コマンド, 配列, 変数)
		コマンドを実行し、実行結果の最終行を返す
		配列には実行結果を代入可能。省略可。
		変数には実行コマンドのステータスを代入可能。省略可。
	・system(コマンド, 変数)
	・例
		$command = '/usr/local/bin/php /htdocs/test.php';
		exec(escapeshellcmd($command));
	・コマンドラインの引数を取得
		$command = '/usr/local/bin/php /htdocs/test.php test sample';
		exec(escapeshellcmd($command));
		のようにコマンドを実行した場合
		test.phpでは、$_GET[]ではなく、$argv[]で取得する
		「実行コマンド 実行プログラム 引数1 引数2 ・・・・」という形式でコマンドを書く
		「/usr/local/bin/php /htdocs/test.php test sample」の場合
			print $argv[0] . "\n";
			print $argv[1] . "\n";
			print $argv[2] . "\n";
		は、
			/htdocs/test.php
			test
			sample
		という結果になる

■型の取得・判別

	・キャスト
		(bool) $value;
		(boolean) $value;
		(int) $value;
		(integer) $value;
		(float) $value;
		(double) $value;
		(string) $value;
		(array) $value;
	・型を指定して値を取得
		floatval($value);
		doubleval($value);
		intval($value);
		strval($value);
	・型を判別
		is_bool($value);
		is_int($value);
		is_integer($value);
		is_long($value);
		is_float($value);
		is_double($value);
		is_string($value);
		is_array($value);
	・型の取得
		戻り値 = gettype($value);
		戻り値:boolean、integer、double、string、array
	・型の変更
		settype($value, bool);
		settype($value, boolean);
		settype($value, int);
		settype($value, integer);
		settype($value, float);
		settype($value, double);
		settype($value, string);
		settype($value, array);

■セッション
	・ログインするとき
		・セッション開始
			session_start();
		・セッションID
			print session_id();
		・セッション変数の設定
			$_SESSION["password"] = $password;
			print $_SESSION["password"];
	
	・ログアウトするとき
		・セッション変数の破棄
			$_SESSION = array();
		・セッションの破棄
			session_destroy();
			
	・その他
		session_cache_limiter('private');

■Cookie (クッキー)
	・Cookieが空かどうか調べて、空でなければ値を取得
		if(!empty($_COOKIE["sample"])){
			$sample = $_COOKIE["sample"];
		}
		
	・Cookieをセットと値の取得
		//セットする時は、ページ出力の前に行う
		//setcookieした後、同じページでCookieをすぐに取得できない
		//ページをリロードすると取得できる
		//すぐに反映したいときは、sessionを使う
		setcookie("sample", "あいうえお");
	
	・Cookieの値の取得
		print $_COOKIE["sample"];
	
	・1つのCookieに複数の値を入れる
		//配列を入れるとエラーになる
		//$result = setcookie("sample_array", $sample_array);
		$sample_array[0] = "あ";
		$sample_array[1] = "い";
		
		$result = setcookie("sample_array[0]", $sample_array[0]);
		$result = setcookie("sample_array[1]", $sample_array[1]);
		
		$sample_array_out = $_COOKIE["sample_array"];
		
		if(!empty($sample_array_out)){
			foreach($sample_array_out as $key => $value){
				print $key . " / " . $value . "<BR>";
			}
		}

■GD
	・情報表示
		旧バージョンでは、gd_info()が使えない。
		get_extension_funcs()でgd_info()があるか確認する。
		$gdinfo = gd_info();
		foreach($gdinfo as $key => $value){
			print $key . " / " . $value . "<BR>";
		}
	・利用可能な関数の表示
		$funcs_list = get_extension_funcs("gd");
		foreach($funcs_list as $key => $value){
			print $key . " / " . $value . "<BR>";
		}
	・imagecreatetruecolor
		PHP 4.0.6で追加され、GD 2.0.1以降で利用可能



■メール送信
	mb_language("Japanese");
	mb_detect_order("auto");
	ini_set("mbstring.http_input", "auto");
	mb_http_output("auto");
	mb_internal_encoding("SJIS");//またはEUC-JPなど
	mb_substitute_character("none");
	
	$mail_to = "oshima@aaa.com";
	$mail_from = "info@aaa.co.jp";
	$mail_cc = $mail_from;
	$mail_from_title = mb_encode_mimeheader("登録通知")."<".$mail_from.">";
	$mail_xmailer = "PHP-" . phpversion();
	$mail_subject = mb_encode_mimeheader("タイトル");
	$mail_body = "****様\n";
	$mail_encode = "SJIS";

	$mail_body = mb_convert_encoding($mail_body, $mail_encode);
	
	$mail_header_array["X-Mailer"] = $mail_xmailer;
	$mail_header_array["From"]     = $mail_from_title;
	$mail_header_array["Cc"]       = $mail_cc;

	foreach($mail_header_array as $key => $value){
		$mail_header .= $key . ": " . $value . "\r\n";
	}
	
	$mail_result = @mb_send_mail($mail_to,
					$mail_subject,
					$mail_body,
					$mail_header,
					"-f" . $mail_from);
			
	if(!$mail_result){
		die("メールを送信できません\n");
	}

■クラス
	include "mailsend.php";
	$obj_mailsend  = new MailSend("SJIS");
	
	//登録通知メール
	$mail_to   = $mail;
	$mail_from = SERVICE_ADMIN_MAIL;
	$mail_cc   = $mail_from;
	$mail_from_title = SERVICE_NAME;
	$mail_xmailer = "PHP-" . phpversion();
	$mail_subject = SERVICE_NAME . " - 登録通知";
	$mail_body = $company1 . " 様\n\n"
				. SERVICE_NAME . "へのご登録ありがとうございます。\n";
				
	$mail_result = $obj_mailsend->mail_send($mail_to,
										$mail_from,
										$mail_cc,
										$mail_from_title,
										$mail_xmailer,
										$mail_subject,
										$mail_body);
・mailsend.php
	/* メール送信処理 */
	Class MailSend{

		public $mail_encoding;

		//コンストラクタ
		function __construct($mail_encoding){
		
			$this->mail_encoding = $mail_encoding;
			
			mb_language("Japanese");
			mb_detect_order("auto");
			ini_set("mbstring.http_input", "auto");
			mb_http_output("auto");
			mb_internal_encoding($this->mail_encoding);
			mb_substitute_character("none");
			
		}

		//メール送信
		function mail_send($mail_to,
							$mail_from,
							$mail_cc,
							$mail_from_title,
							$mail_xmailer,
							$mail_subject,
							$mail_body){
			
			$mail_from_title = mb_encode_mimeheader($mail_from_title) . " <" . $mail_from . ">";
			$mail_subject = mb_encode_mimeheader($mail_subject);
			$mail_body = mb_convert_encoding($mail_body, $this->mail_encoding);

			$mail_header_array["X-Mailer"] = $mail_xmailer;
			$mail_header_array["From"]     = $mail_from_title;
			$mail_header_array["Cc"]       = $mail_cc;

			foreach($mail_header_array as $key => $value){
				$mail_header .= $key . ": " . $value . "\r\n";
			}

			$mail_result = @mb_send_mail($mail_to,
										$mail_subject,
										$mail_body,
										$mail_header,
										"-f" . $mail_from);
			
			return $mail_result;
		}
	}


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