apacheサービス登録

conf/httpd.conf
をコピーして
conf/httpd_83.conf
を作成

いくつか変更

#Listen ***.***.***.***:80
Listen 83



#
# ServerAdmin webmaster@dummy-host.example.com
# DocumentRoot /www/docs/dummy-host.example.com
# ServerName dummy-host.example.com
# ErrorLog logs/dummy-host.example.com-error_log
# CustomLog logs/dummy-host.example.com-access_log common
#


DocumentRoot “C:/hogehoge/hogehoge/htdocs_83″
ServerName localhost

■コマンド(cmd.exe)からサービス登録
> cd C:\hogehoge\apache\bin
> apache -k install -n “Port83″ -f conf/httpd_83.conf

■(apacheサービスモニターもしくはサービスから)サービスの開始
Port83を選択して「サービスの開始」

■apacheサービスモニターからサービスのSTART

■確認
htdocs_83のフォルダにファイルを入れ(index.htmlとか)
ブラウザから
localhost:83 にアクセスできるか確認

CakePHPのインストール

DBはMySQLとしてCakePHPをインストールする
(ロリポップサーバーの場合:参考)

①cakePHPのダウンロード

http://cakephp.org/から最新版をダウンロード

②サーバーにアップロード

サーバーにフォルダ(ここでは”cake”を作成)を作成し、解凍したCakePHPをアップロードする。(tar.gzの場合はサーバーで展開)

サーバーの状態

htdocs(web)
┗cake
 ┣app
 ┣lib
 ┣plugins
 ┗vendors
   README.md
   .htaccess
   (etc)

③MySQLのインストール

以下を忘れずに(⑤で使う)
(ロリポップサーバーの場合)

・MySQLサーバーのアドレス ‘mysql***.phy.lolipop.jp’
・データベースのユーザー名 ‘LAA0******’
・データベースのパスワード ‘**********’
・データベース名 ‘LAA0******-*****’
・文字コード ‘utf8′

④アクセスしてみる

http://hogehoge.com/cake/

なにか表示されればOK

⑤データベースへの接続設定ファイルを編集する

以下のファイルをコピーして名前を変更する
cake/app/Config/database.php.default

cake/app/Config/database.php

database.phpを編集する

<変更前>

public $default = array(
	'datasource' => 'Database/Mysql',
	'persistent' => false,
	'host' => 'localhost', //●要変更
	'login' => 'user', //●要変更
	'password' => 'password', //●要変更
	'database' => 'database_name', //●要変更
	'prefix' => '',
	//'encoding' => 'utf8', //●要変更 コメントアウト
);

<変更後>

public $default = array(
	'datasource' => 'Database/Mysql',
	'persistent' => false,
	'host' => 'mysql***.phy.lolipop.jp',
	'login' => 'LAA0******',
	'password' => '**********',
	'database' => 'LAA0******-*****',
	'prefix' => '',
	'encoding' => 'utf8',
);

※更新したらアップロード忘れずに!

⑥ハッシュ値の変更

おそらく現段階では以下の2つのエラーが出ていると思う。

Notice (1024): Please change the value of 'Security.salt' in app/Config/core.php to a salt value specific to your application [CORE/Cake/Utility/Debugger.php, line 851]
Notice (1024): Please change the value of 'Security.cipherSeed' in app/Config/core.php to a numeric (digits only) seed value specific to your application [CORE/Cake/Utility/Debugger.php, line 855]

これは、ハッシュのもととなる salt 文字列がデフォルトのままなので変更してほしいというメッセージである。
そのため、以下のファイルを変更する必要がある
cake/app/Config/core.php

<変更前> core.php#200行目あたり

/**
 * A random string used in security hashing methods.
 */
	Configure::write('Security.salt', 'DYhG93b0qyJfIxfs2guVoUubWwvniR2G0FgaC9mi'); //←ここを変更

/**
 * A random numeric string (digits only) used to encrypt/decrypt strings.
 */
	Configure::write('Security.cipherSeed', '76859309657453542496749683645'); //←ここを変更

<変更後> core.php#200行目あたり

/**
 * A random string used in security hashing methods.
 */
	Configure::write('Security.salt', 'hogehoge');

/**
 * A random numeric string (digits only) used to encrypt/decrypt strings.
 */
	Configure::write('Security.cipherSeed', 'hogehogehoge');

※更新したらアップロード忘れずに!

⑦これでインストール完了

自身のファイルがあるディレクトリに関する情報の取得

現在のファイルのディレクトリパスを取得: dirname(__FILE__)
ドキュメントルートのパスを取得: getenv(“DOCUMENT_ROOT”)
サーバーの名前(URL)を表示: $_SERVER['SERVER_NAME']
現在のファイルの(web公開の)ディレクトリパスを取得:$_SERVER["PHP_SELF"]

echo dirname(__FILE__);
// ⇒/home/users/web/hoge

echo getenv("DOCUMENT_ROOT");
// ⇒/home/users/web

echo $_SERVER['SERVER_NAME'];
// ⇒ hogehoge.com

echo $_SERVER["PHP_SELF"];
// ⇒ /hoge/index.php

fgetsで取得した文字列から改行コードを削除する

str_replace(array(“\r\n”,”\r”,”\n”), ”, $str);

改行コード(\r\n,\r,\n)を空欄に置き換える。

// ファイル名
$filePath = "/tmp/hogehoge.txt";

// ファイルオープン 
$fileH = fopen($filePath,"r");

// 1行読み込み
$str= fgets($fileH);

// 改行コードの削除
$str = str_replace(array("\r\n","\r","\n"), '', $str); 

//ファイルクローズ 
fclose($fileH); 

よく使うdate関数フォーマット一覧

date("フォーマット"[, $timestamp]);

ex)

date("Y-m-d"); // 現在時刻から
date("Y-m-d", time()); // 現在時刻から
date("Y-m-d", strtotime("2011-01-11 11:10:11")); // 文字列の時間から
date("Y-m-d G:i:s", strtotime("2011-01-11 11:10:11 + 1 day")); // 文字列の時間から(一日追加)

2010/1/1 1:09:03に対して。

date(“Y/m/d G:i:s”) 2010/01/01 01:09:03 月・日・時:0いれる 24時間表記
date(“Y/m/d”) 2010/01/01 月・日0入れる
date(“Y/n/j”) 2010/1/1 月・日0入れない
月・日:入れない
date(“G:i:s”) 1:09:03 時:0いれない 0~23
date(“g:i:s”) 1:09:03 時:0いれない 0~12
date(“H:i:s”) 01:09:03 時:0いれる 00~23

CSVファイルを読み込む

CSVから読み込んで変数に格納

以下は3列のcsvを読み込むプログラム

/**
 * CSVファイルを読み込む
 */
function readCSV() {

	$row = 1;
	if (($handle = fopen($_FILES['file_select']['tmp_name'], "r")) !== FALSE) {

		// PHP5でfgetcsvを行うと先頭1バイトが正しく読み込めないエラーに対応
		setlocale(LC_ALL, 'ja_JP');

	    while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
	        $num = count($data);
			if( $num != 3 ){
				echo "フォーマットエラー";
				break;
			}
			$user_name = mb_convert_encoding($data[0], "UTF-8", "SJIS");
			$address = mb_convert_encoding($data[1], "UTF-8", "SJIS");
			$password = mb_convert_encoding($data[2], "UTF-8", "SJIS");

			// "でくくられている場合
			// 先頭と末尾両方に"が含まれていた場合、先頭と末尾の"のみ削除する
			
			if( (strcmp(substr($user_name, 0, 1), "\"") == 0 ) && (strcmp(substr($user_name, 0, 1), "\"") == 0 ) ){
				$user_name = substr( $user_name, 1, strlen($user_name) - 2 );
			}
			if( (strcmp(substr($address, 0, 1), "\"") == 0 ) && (strcmp(substr($address, 0, 1), "\"") == 0 ) ){
				$address = substr( $address, 1, strlen($address) - 2 );
			}
			if( (strcmp(substr($password, 0, 1), "\"") == 0 ) && (strcmp(substr($password, 0, 1), "\"") == 0 ) ){
				$user_name = substr( $password, 1, strlen($password) - 2 );
			}

			$data_list[$row - 1]["user_name"] = $user_name;
			$data_list[$row - 1]["address"] = $address;
			$data_list[$row - 1]["password"] = $password;
	        $row++;
	    }
	    fclose($handle);
	}

	return $data_list;
}

fgetcsvで先頭が文字化け

fgetcsv関数でcsvファイルを読み込んだときに文字化けが起きてしまったのでその対処法。

ただし、CSVの中身ががダブルクオーテーションで囲われていれば発生しない。
ex) “aaa”,”bbb”,”ccc”

php5では先頭1or2バイトが正しく変換されないようだ。

解決法はfgetcsvを行う前に、

setlocale(LC_ALL, 'ja_JP');

と記述しただけ。

以下の方がより正確とか

setlocale(LC_ALL, 'ja_JP.UTF-8');
setlocale(LC_ALL, 'ja_JP.EUC-JP');
setlocale(LC_ALL, 'ja_JP.Shift_JIS');

↓確認してないからエラーあるかも

if (($handle = fopen("filename.csv", "r")) !== FALSE) {

    // PHP5でfgetcsvを行うと先頭1バイトが正しく読み込めないエラーに対応
    setlocale(LC_ALL, 'ja_JP');

    while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
	    for ($count = 0; $count < $num; $count++){
		    echo "<p>" . mb_convert_encoding($data[0], "UTF-8", "SJIS") . "</p>";
	    }
    }
    fclose($handle);
}