FC2ブログ

技術系のブログ

ぺんたんの更新情報を配信してます。本家サイトにない情報が配信されることがあるかも 本家はこちら http://pentan.info/

スポンサーリンク

== と === の違い(比較演算子)

PHPではif文などの真偽を判定するときに、== や === を使用しますが、この==と===の違いは、値のみを見るか型まで見るかの違いです。

[参照記事] Javaでの==の意味

続きを読む
スポンサーサイト
  1. 2012/03/04(日) 03:19:03|
  2. PHP
  3. | トラックバック:0
  4. | コメント:0

暗号化・複合化を行う ブロック暗号

PHPでブロック暗号を行うにはMcrypt関数で可能です。
AESやDES、Blowfishなどが使用可能です。

[参考記事] ブロック暗号とは
[参考記事] Javaで暗号化・複合化を行う ブロック暗号
[参考記事] Perlで暗号化・複合化を行う ブロック暗号
[参考記事] Rubyで暗号化・複合化を行う ブロック暗号

PHPではCrypt_BlowfishというPEARもあります。
[参考記事] テキストを可逆的な暗号化する Crypt_Blowfish

サンプルコード
使用できる暗号利用モードの一覧
使用できる暗号アルゴリズムの一覧

続きを読む
  1. 2012/02/27(月) 16:03:28|
  2. PHPサンプルコード
  3. | トラックバック:0
  4. | コメント:2

echoしても文字は表示されないのに、emptyがtrueにならない

echoをすると文字は出力されないにもかかわらず、次のコードのようにemptyなどの判定がtrueにならないことがあります。

[参考記事] JISコードでstrlenの文字数が合わない(目視の文字数とstrlenの文字数が異なる)

if(empty($str)){
  return 'empty true';
}elseif($str==""){
  return '=="" true';
}elseif(!$str){
  return '!$str true';
}else{
  return 'empty false / =="" false / !$str false';
}

このとき$strには画面に表示されない文字が含まれていることが考えられます。

続きを読む
  1. 2012/02/26(日) 23:56:45|
  2. PHP
  3. | トラックバック:0
  4. | コメント:0

JISコードでstrlenの文字数が合わない(目視の文字数とstrlenの文字数が異なる)

文字コードをJISにしたものをShift-JISなどのページで表示すると、英文字と記号が表示されます。
この文字をstrlenでカウントすると、表示されている文字数を目視で数えたときと文字数が違うことがあります。

<?php
$str = "あいうえおかきくけこ";
$str = mb_convert_encoding($str,"JIS","SJIS-win");
echo $str ;
echo "<br />";
echo strlen($str);

『あいうえおかきくけこ』をJISコードにすると『$B$"$$$&$($*$+$-$/$1$3(B』で24文字ですが、strlenだと26文字になります。

これはstrlenのバグではありません。
あとの2文字はブラウザで表示されていないだけです。

続きを読む
  1. 2012/02/26(日) 23:54:56|
  2. PHP
  3. | トラックバック:0
  4. | コメント:0

Deprecatedエラーを消す方法 (php.iniや.htaccess)

PHP5.3などでは次のようなエラーが出ることがあります。

[参考記事] Deprecatedエラーを消す方法
[参考記事] OpenPNEでエラーレベルを変更する方法

Deprecated: Function eregi() is deprecated
続きを読む
  1. 2012/02/26(日) 23:38:44|
  2. PHP
  3. | トラックバック:0
  4. | コメント:0

simplexml_load_file()、simplexml_load_string()でparser error : Input is not proper UTF-8, indicate encoding !

simplexml_load_file()、simplexml_load_string()で次のようなエラーが出ることがあります。

Warning: simplexml_load_file() [function.simplexml-load-string]: Entity: line 4: parser error : Input is not proper UTF-8, indicate encoding ! Bytes: 0x8B 0x81 0x90 0x6C in xxxx line 00

Warning: simplexml_load_string() [function.simplexml-load-string]: Entity: line 4: parser error : Input is not proper UTF-8, indicate encoding ! Bytes: 0x8B 0x81 0x90 0x6C in xxxx line 00

この場合、取得するXMLの文字コードが間違っているか、XMLの中に不正な文字コードの文字が含まれています。

続きを読む
  1. 2012/02/26(日) 23:37:19|
  2. PHP
  3. | トラックバック:0
  4. | コメント:0

ログイン認証処理をする方法

CakePHPでは認証処理を行う方法として、Authコンポーネントが用意されています。

/cake/libs/controller/components/auth.php

これをコントローラ内で使用するように指定することで、そのコントローラに認証制限をかけることができます。

class TestController extends AppController
{
  var $components = array('Auth');
  function index() {

  }
}
続きを読む
  1. 2012/02/26(日) 23:35:12|
  2. CakePHP
  3. | トラックバック:0
  4. | コメント:0

action名にlistは使えない listを使う方法

CakePHPではアクション名にlistを使うことができません。
通常、listアクションを使用するとコントローラーに紐付くテーブル情報一覧が表示されます。

また次のようなエラーが発生します。

syntax error, unexpected 'array', expecting 'identifier'

Parse error: syntax error, unexpected T_LIST, expecting T_STRING in /app/controllers/test_controller.php on line xx
続きを読む
  1. 2012/02/26(日) 23:33:42|
  2. CakePHP
  3. | トラックバック:0
  4. | コメント:0

Yiiとは

YiiとはPHPのフレームワークのひとつです。
Yii(イー; [ji:])の名前は"Yes It Is!"の省略形です。

続きを読む
  1. 2012/02/26(日) 23:12:17|
  2. PHP
  3. | トラックバック:0
  4. | コメント:0

ファイルダウンロード時のファイル名が文字化けする対処法

ファイルをダウンロードするときのヘッダーは次のようになります。

header('Last-Modified: '. gmdate('D, d M Y H:i:s') .' GMT');
header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename="'.$file_name.'"');
header('Content-Transfer-Encoding: binary');
header('Content-Length: ' . filesize($file_path));

[参考記事] SSL(HTTPS)でファイルのダウンロードができない場合

ダウンロード時のファイル名の指定方法の仕様

続きを読む
  1. 2012/02/26(日) 23:11:18|
  2. PHP
  3. | トラックバック:0
  4. | コメント:0

MySQLで文字化けを防ぐ方法

MySQLで文字化けを防ぐには、SQLの実行前に次のSQLを実行します。

SET NAMES utf8

[参考記事] SET NAMESで文字セットを変更することは推奨されません

CakePHPでは、app/config/database.phpのDB接続設定に

'encoding'=>'文字コード'

を追加します。
これを追加することで、DB接続直後にSET NAMESが実行されます。

具体的には次のようになります。

続きを読む
  1. 2012/02/26(日) 23:01:15|
  2. CakePHP
  3. | トラックバック:0
  4. | コメント:0

複数のデータベースを切り替える方法

CakePHPで複数のデータベースを使用する方法です。

/app/config/database.php
に複数の接続設定を記述します。

class DATABASE_CONFIG {

  var $default = array(
    'driver' => 'mysql',
    'persistent' => false,
    'host' => 'localhost',
    'login' => 'user',
    'password' => 'password',
    'database' => 'dbname',
    'port' => '3306',
    'prefix' => '',
    'encoding' => 'utf8'
  );

  var $sub = array(
    'driver' => 'mysql',
    'persistent' => false,
    'host' => 'localhost',
    'login' => 'user',
    'password' => 'password',
    'database' => 'dbname2',
    'port' => '3306',
    'prefix' => '',
    'encoding' => 'utf8'
  );
}
続きを読む
  1. 2012/02/26(日) 22:56:15|
  2. CakePHP
  3. | トラックバック:0
  4. | コメント:0

プライマリキーIDを連番数字ではなく推測しにくい文字列にする方法

CakePHPではプライマリーキーのIDは基本的に自動採番で連番のIDが割り振られます。
連番のIDとなっていると、存在するIDや前後のIDが推測できてしまいます。
このため推測しにくいIDとする方法があります。

続きを読む
  1. 2012/02/25(土) 13:48:24|
  2. CakePHP
  3. | トラックバック:0
  4. | コメント:0

OpenPNEのバージョンを知る方法

OpenPNE3の場合

続きを読む
  1. 2012/02/25(土) 13:07:59|
  2. OpenPNE
  3. | トラックバック:0
  4. | コメント:0

Live Commerceとは

Live Commerceとは、日本語、英語、中国語(簡体字、繁体字)に対応した多言語ECサイト構築ソリューションです。
オープンソース版とASP版、商用版があります。
オープンソース版はGPLライセンスになります。

[参考記事] オープンソースライセンスの一覧と日本語訳

PHP、MySQL、Apacheで動作します。
Zend Frameworkをベースに作られていますが、ダウンロードできるオープンソース版パッケージソースにはZend Frameworkは含まれていないため、別途入手する必要があります。
またZend Frameworkを使用するなどの理由から、PHP5.2.4以降が必須となりますが、PHP5.3系では動作しないようです。

続きを読む
  1. 2012/02/25(土) 13:06:35|
  2. Live Commerce
  3. | トラックバック:0
  4. | コメント:0

Zend Optimizerのインストール

Zend Optimizerとは、Zend社によって開発されたPHPアプリケーションの実行速度をマルチ・パス・コード最適化手法により高速化させるソフトウェアです。

Zend OptimizerはPHP4から対応していますが、PHP5.3では対応していません。
PHP5.3ではZend Optimizer+として、Zend Serverのモジュールになっています。

[参考記事] Zend Serverとは

日本語版はゼンド・ジャパン株式会社によって公開されています。

続きを読む
  1. 2012/02/25(土) 12:54:46|
  2. PHP
  3. | トラックバック:0
  4. | コメント:0

パッケージのディレクトリ構成

オープンソース版Live Commerceのパッケージのディレクトリ構成です。

[参考記事] インストール直後のディレクトリ構成

続きを読む
  1. 2012/02/25(土) 12:47:36|
  2. Live Commerce
  3. | トラックバック:0
  4. | コメント:0

インストール直後のディレクトリ構成

オープンソース版Live Commerceのインストール直後のディレクトリ構成です。

[参考記事] パッケージのディレクトリ構成

続きを読む
  1. 2012/02/25(土) 12:42:16|
  2. Live Commerce
  3. | トラックバック:0
  4. | コメント:0

Live Commerceのインストール

Live Commerceをインストールする手順です。

まずLive Commerceで使用するMySQLサーバのデータベースを用意します。

パッケージをダウンロードして、解凍し
public_html
を公開層のルート階層にします。
オープンソース版パッケージのダウンロード

http://www.example.com
だった場合
http://www.example.com/install/
にアクセスするとインストール画面になります。

利用規約と必須環境チェック
ここでバツになっている項目があると、インストールできません。

続きを読む
  1. 2012/02/25(土) 12:38:04|
  2. Live Commerce
  3. | トラックバック:0
  4. | コメント:0

基本的な特徴

フレームワーク

Zend Framework

[参考記事] Zend Framework

続きを読む
  1. 2012/02/25(土) 02:36:05|
  2. Live Commerce
  3. | トラックバック:0
  4. | コメント:0

サーバ移行時の設定(パス設定を設置場所に依存しないようにする方法)

Live Commerceの設定ファイルは
/application/config.ini
になります。

変更箇所は『設置場所に依存するパス設定』、『MySQLの接続情報』、『 URL 』の項目になります。

パス設定を設置場所に依存しないようにする方法

続きを読む
  1. 2012/02/25(土) 02:34:46|
  2. Live Commerce
  3. | トラックバック:0
  4. | コメント:0

POSTでアップロードできるファイルサイズの制限を変更する方法

PHPでは、POSTフォームのファイルアップロードでファイル容量に制限があります。

これはユーザに大きなファイルを送信されて、サーバ容量が圧迫されないようにするための設定です。

これに影響するphp.iniの設定は次の3項目です。

; Maximum amount of memory a script may consume (8MB)
memory_limit = 8M
; Maximum size of POST data that PHP will accept.
post_max_size = 8M
; Maximum allowed size for uploaded files.
upload_max_filesize = 4M

upload_max_filesizeがフォームで送信できる最大容量

サンプルコード

続きを読む
  1. 2012/02/03(金) 09:31:53|
  2. PHPサンプルコード
  3. | トラックバック:0
  4. | コメント:0

ディレクトリ内のファイルのパーミッションを一括で変更する

[参考記事] ファイルを読み込む/ファイルに書き込む

サンプルコード

続きを読む
  1. 2012/02/01(水) 07:35:47|
  2. PHP
  3. | トラックバック:0
  4. | コメント:0

MySQLサーバに接続できるかどうかを確認する

MySQLのデータベースに接続できるかを確認するためのサンプルソースです。
[参考記事] MySQL関数のまとめ

付与されたデータベースの接続情報があっているかどうかを確認するときに使います。

MySQLに接続するには
サーバに接続する mysql_connect と、データベースに接続する mysql_select_db を使用します。

mysql_connect はホストアドレスやユーザ名、パスワードが渡されない場合は、php.iniで設定されている情報を使用します。
ini_get("mysql.default_host")
ini_get("mysql.default_port")
ini_get("mysql.default_user")
ini_get("mysql.default_password")

サンプルコード

続きを読む
  1. 2012/02/01(水) 07:32:27|
  2. PHP
  3. | トラックバック:0
  4. | コメント:0

MySQL関数のまとめ

MySQLサーバに接続する
MySQLのクエリを実行する
文字列をエスケープする
文字セットを変更する
SELECTなどの結果セットの扱い方
複数のデータベースに接続する

MySQLサーバに接続する

[参考記事] MySQLサーバに接続できるかどうかを確認する

// データベースサーバへの接続を試みる
if (!$con = @mysql_connect($server,DB_USERNAME,DB_PASSWORD)){
  print "Can not connect Server! host or username or password is wrong";
  exit;
}

// データベースへの接続を試みる
if(!mysql_select_db(DB_DATABASE,$con)){
  print "Can not connect Database! database name is wrong";
  exit;
}

MySQLのクエリを実行する

mysql_query(【SQL文】);

このときの戻り値は、エラーの場合、falseを返します。
成功した場合、結果セットを返すSQL文(SELECT、SHOW、DESCRIBE、EXPLAINなど)では、resource を返し、 結果セットを返さないSQL文(DELETE、INSERT、REPLACE、UPDATEなど)では、trueを返します。

エラーの場合エラーメッセージはmysql_error()、エラー番号はmysql_errno()で受け取れます。
たとえばエラーが発生した場合に処理を停止して、SQLのエラーメッセージを表示させるには次のようにします。

if(!mysql_query ($sql)){
	die(mysql_errno() . ':' . mysql_error());
}

if文は、空やブランクでもfalseと同様に扱いますが、SELECT文のmysql_queryの戻り値は結果が0件であってもResource idを返すので, 次のようなコードでもSQL文でエラーが発生しない限りif文の中は通りません。

if(!$resource = mysql_query (【結果がヒットしないSELECT文】)){
	die(mysql_errno() . ':' . mysql_error());
}

SELECT文によって返された行の数を知るには mysql_num_rows() を用います。
また DELETE、INSERT、REPLACEまたはUPDATE文で変更された行の数を知るには mysql_affected_rows() を用います。
INSERT文で挿入された自動採番(AUTO INCREMENT)の値を知るには mysql_insert_id() を用います。

文字列をエスケープする

INSERTやUPDATE文、WHERE句などで値をMySQLで実行できるようエスケープするにはmysql_real_escape_string()を使用します。
エスケープする関数には、ほかに mysql_escape_string()がありますが、この関数はPHP5.3.0で非推奨になっています。
mysql_real_escape_string()は現在の接続の文字セットで特殊文字をエスケープしますが、mysql_escape_string()は文字セットを考慮しません。
このためエスケープにはmysql_escape_string()ではなく、mysql_real_escape_string()を使用するようにします。

エスケープされる文字

NULL (null文字)0x00
\n LF(改行)0x0a
\r CR(復帰)0x0d
\ 0x5c
' (シングルクオート)0x27
" (ダブルクオート)0x22
SUB (置換)0x1a

LIKE演算子での『 % 』や『 _ (アンダーバー)』はエスケープされません。

たとえば『 %test" aaaa\ 』は『 %test\" aaaa\\ 』になります。

$str = "%test\" aaaa\\";
$str = mysql_real_escape_string($str);
print_r($str);

%test\" aaaa\\
続きを読む
  1. 2012/02/01(水) 01:57:45|
  2. PHP
  3. | トラックバック:0
  4. | コメント:0

上に戻る