FuelPHPでindex.phpを省略する方法

fuel/app/config/config.phpを編集

/**                                                                                    
 * index_file - The name of the main bootstrap file.                                   
 *                                                                                     
 * Set this to 'index.php if you don't use URL rewriting                               
 */
-//'index_file' => false,
+  'index_file' => false,

PROJECT_Directory/public/.htaccessを編集

# Remove index.php from URL
-#RewriteCond %{HTTP:X-Requested-With}    !^XMLHttpRequest$
-#RewriteCond %{THE_REQUEST}                              ^[^/]*/index\.php [NC]
-#RewriteRule ^index\.php(.*)$                    $1 [R=301,NS,L]

# Remove index.php from URL
+RewriteCond %{HTTP:X-Requested-With}    !^XMLHttpRequest$
+RewriteCond %{THE_REQUEST}                              ^[^/]*/index\.php [NC]
+RewriteRule ^index\.php(.*)$                    $1 [R=301,NS,L]

/etc/apache2/apache2.confの先頭に#がついてない全てのAllowOverride NoneのところををAllに変更。

変更が必要ないところもあるので以下をよく確認してください。ずべてコピペはあまりオススメしません。

<Directory />
	Options FollowSymLinks
	AllowOverride All
	Require all denied
</Directory>

<Directory /usr/share/>
	AllowOverride All
	Require all granted
</Directory>

<Directory /var/www/>
	Options Indexes FollowSymLinks
	AllowOverride All
	Require all granted
</Directory>

#<Directory /srv/> //変更する必要なし//
#	Options Indexes FollowSymLinks
#	AllowOverride None
#	Require all granted
#</Directory>




# AccessFileName: The name of the file to look for in each directory
# for additional configuration directives.  See also the AllowOverride
# directive.
#
AccessFileName .htaccess //変更する必要なし//
# 
# The following lines prevent .htaccess and .htpasswd files from being
# viewed by Web clients.
#
<FilesMatch "^\.ht"> //変更する必要なし//
Require all denied
</FilesMatch>

以上の設定をするだけでindex.phpが省略されると書かれていますが自分はそううまくはきませんでした。FuelPHPのバージョンやUbuntuの環境による違いもあると思います。自分のマシンは凝った設定はしておらず、最近Ubuntu Server 16.04.1 LTSをインストールし、EmacsFuelPHPを入れたくらいです。

引き続き/etc/apache2/apache2.confの最終行に以下の設定を加えたらindex.phpを省略できました。

*下記参考サイトではlibexec/apache2/mod_rewrite.soの読み込みを有効にしていますが2016年12月23日時点で自分の環境でsudo findしてもlibexec/apache2/内にmod_rewrite.soは見つかりませんでした。/usr/libexecはなくて/usr/lib/apache2/modules/内にありました。

+LoadModule rewrite_module /usr/lib/apache2/modules/mod_rewrite.so 

apacheを再起動するのも忘れずに。(大事)

stnet@m1:$ sudo systemctl restart apache2

参考サイト。

http://qiita.com/cathei/items/a179a2fdb5535e52b180

〜FuelPHP〜 oil generate migrationでMySQLのテーブルを作る

ブログなどのコンタクトフォームから送信されたデータを保存する時はデータベースが必要になってきます。今回はFuelPHPでコンタクトフォームを作るときを想定してMySQLでデータベースとテーブルを作りたいと思います。

まずMySQLにログイン

stnet@m1:$ mysql -u root -p

データベースを作ります。はじめ oil generate migration でデータベースも作ってくれるのかと思っていましたが手動で作る必要があります。ここでは例としてデータベース名をmysql_devとし、デフォルトの文字コードUTF-8にするときを想定します。

mysql > create database mysql_dev default character set utf8;

テスト環境のデータベースを作ってもいいでしょう。ここではデータベース名をmysql_testとし、同様にデフォルトの文字コードUTF-8にするときを想定します。

mysql > create database aizu_uni_2016_test default character set utf8;

ユーザーにデータベースを扱う権限を追加

mysql > grant all privileges on mysql_dev.* to username@localhost identified by 'passwd';

同様にテスト環境用にも。identified 以降は省略してもk構いません

mysql > grant all privileges on mysql_test.* to username@localhost;
mysql > \q

マイグレーションによるテーブルの作成にはfuel/core/config内のmigrations.phpを以下のフォルダにコピーしてあげる必要があります。

stnet@m1:$ cp fuel/core/config/migrations.php fuel/app/config/development/
stnet@m1:$ cp fuel/core/config/migrations.php fuel/app/config/test/

次にfuel/app/config/db.phpを編集

<?php
/**
 * Use this file to override global defaults.
 *
 * See the individual environment DB configs for specific config information.
 */

return array(

	'default' => array(
	    'type'         => 'mysqli',
	    'connection'   => array(
	    'persistent'   => false,
	    ),
	    'charset'	   => 'utf8',
	    'collation'    => false,
	    'enable_cache' => true,
	    'profiling'    => false,
	    'readonly' 	   => false,
      ),
);

developmentディレクトリにコピーしたdb.phpを編集

<?php
/**
 * The development database settings. These get merged with the global settings.
 */

return array(
	'default' => array(
		'connection'  => array(
			//'dsn'        => 'mysql:host=localhost;dbname=mysql_dev',
			'hostname'   => 'localhost',
			'port'       => '3306',
			'database'   =>	'databasename',
			'username'   => 'username',
			'password'   => 'password',
		),
	),
);

return array(
        'profiling' => true,
);

testディレクトリにコピーしたdb.phpを編集

<?php
/**
 * The test database settings. These get merged with the global settings.
 *
 * This environment is primarily used by unit tests, to run on a controlled environment.
 */

return array(
	'default' => array(
		'connection'  => array(
			//'dsn'        => 'mysql:host=localhost;dbname=mysql_test',
			//'username'   => 'fuel_app',
			//'password'   => 'super_secret_password',
			'hostname'   => 'localhost',
			'port'       => '3306',
			'database'   =>	'databasename',
			'username'   => 'username',
			'password'   => 'password',
		),
	),
);

データベースを定義

stnet@m1:$ oil generate migration create_form id:int username:string[50] email:string[100] message_text:string[400] imgpath:string[512] created_at:int uploaded_at:int  

最後に、定義したデータベースを実際に作成します。

stnet@m1:$ oil refine migrate

refineが成功したら何もエラーがでないはずです。

PostgreSQLとPHPでAutocompleteを作る Part 1

今回はskillsという名前のMySQLSQLファイルを変換してPostgreSQL用にダンプファイルを作成します。 (これがなかなか時間かかりました......) それについても書きたいと思います。

※最近まで手順がばらばらのまま記事を掲載しておりました。お詫びいたします。また初心者にもわかりやすいように言い回しがくどい箇所があるかもしれません。ご了承ください。

SQLファイルはこちら

emacsなどにコピーした後にファイルの拡張子を.sqlにしてください。

https://drive.google.com/file/d/0B7YeptbCjhpaTVRoN3VMTjI4eW8/view?usp=sharing

MySQLでデータベースを作成する

はじめにMySQLを起動(ここではmysqlをインストールした前提になります)

mysql> show databases;

すると以下のようになると思います。(個人の環境によって違う場合もあります)

f:id:yuki_net:20161005182506p:plain

MySQLでcreate databaseする。今回はskillsというデータベースを作ります。(このときcreate databaseしないで次に進めばUnknown databaseとなるので注意。)

mysql> create database skills; 

もう一度show database;として、skillsというデータベースが作成されていることを確認してください。

f:id:yuki_net:20161005182544p:plain

MySQLにデータを格納します。

mysql -u root -D mysql -p < skills.sql

いったんexitとしたいところですが、ここでテーブルも作っておかないと

f:id:yuki_net:20161205203252j:plain

このように表示されてしまいます。ということでMySQLでテーブルを定義しましょう。

f:id:yuki_net:20161205203500j:plain

sqlファイルをリダイレクトしてデータベースに格納します。

stnet@m1:$ mysql -u root -D skills -p < skills.sql 

MySQLからPostgreSQL用のファイルに変換する

ファイルがある場所でダンプコマンドを実行します。今回はdatabase_nameとtable_name、filenameをskillsとします。

mysqldump -uroot -p database_name --compatible=postgresql  -t -c --skip-quote-names --skip-extended-insert --skip-add-locks --default-character-set=utf8 table_name  | sed "s/\\\'/\'\'/g" >  dump-filename.sql 

PostgreSQLでcreate databaseする。今回はskillsというデータベースを作ります。

stnet@m1:$ sudo -i -u postgres
[sudo] password for {usename}:
postgres@m1:~$ psql
psql (9.5.5)
Type "help" for help.

postgres=# create database skills; 

今回の目的はダンプしたdump-skills.sqlPostgreSQLのデータベースに格納したいのでMySQLと同様にPostgreSQLでもCREATE DATABASEしましょう。続けてテーブルも作らないと以下のようなエラーになります。

Password for user postgres:
ERROR: relation "skills" does not exist
LINE 1: INSERT INTO skills (id, skill) VALUES (1,'ActionScript');
                    ^
ERROR: relation "skills" does not exist
LINE 1: INSERT INTO skills (id, skill) VALUES (2,'AppleScript');
                    ^
ERROR: relation "skills" does not exist
LINE 1: INSERT INTO skills (id, skill) VALUES (3,'Asp');
                    ^
ERROR: relation "skills" does not exist
LINE 1: INSERT INTO skills (id, skill) VALUES (4,'Basic');
                    ^
ERROR: relation "skills" does not exist
LINE 1: INSERT INTO skills (id, skill) VALUES (5,'C');
                    ^
ERROR: relation "skills" does not exist
LINE 1: INSERT INTO skills (id, skill) VALUES (6,'C++');
                    ^
                    .
                    .
                    .
                    .
                    

ということでPostgreSQLでテーブルを作成

f:id:yuki_net:20161007192050p:plain

変換したファイルでPostgreSQLのデータベースを作成する

stnet@m1:$ psql -U postgres -d skills < dump-skills.sql 

をすると

f:id:yuki_net:20161005192756j:plain

INSERT 0 1 というのが続けばデータの格納がうまくいっています。

selectを使ってskillsデータベースを確認してみましょう。ここまででautocompleteの下準備が出来上がりました。

stnet@m1:$ sudo -i -u postgres
postgres@m1:$ psql skills
Password: 
psql (9.5.4)
Type "help" for help.

skills=# select * from skills;

f:id:yuki_net:20161005193326p:plain

次回はPHPファイルを作ってPostgreSQLとconnectし、Autocompleteを実現について描いていきたいと思います。

自作PCに挑戦しました!

2016/7月。

自作PCが完成しました。今までやってみたかったことの一つがようやくできました。

去年Skylakeが出たあたりから自作PCやりたいと思うようになり、構成をゆっくり考えていました。

一時は持ち運びができる方がいいんじゃないかなぁってことでノートPCを買いたいと思っていた時期もありましたが、

やっぱりメインPCはデスクトップがいいと思ってPCを自作することに決めました。

それがだいたい今年の3月頃です。そしてパーツを少しずつ買い揃えました。

一番悩んだのは全体の予算とPCケース。

予算に関して。特に円高が進んでいたことやメモリの供給過剰?ということが重なり、メモリは去年に比べて半額、さらには1/3くらいの価格になってるものもありました。

そのため買う時期を見極めるのがちょっと難しかったです。

はじめ8GBを購入しましたがどんどん価格が落ち込むので8GBを売って16GBを買いました。

そしてケース。なかなかいいのが見つかりませんでした。自分の好みはシンプルで癖のないデザイン。

去年NTT-X Storeで購入したServer Primergy TX1310にUbuntuを入れてサーバー立てましたが、そのケースはとても自分の好みでした。

Primergyに似てるケースを探してましたが天板はペコペコするとか裏配線に対応してないとか........価格.comの口コミやいろいろなブログを頼りに絞り込んでいきました。

結果、以下の構成になりました。

 

パーツ名型番・商品名価格
CPU Core i7 6700K BOX 37,350円
CPUクーラー Macho120 SBM 6,698円
マザーボード H170-PRO 13,179円
メモリ CT2K8G4DFD8213 6,393円
ビデオカード GTX 960 GAMING 2G FFTZ 20,980円
電源 KRPW-GT600W/90+ 9,796円
SSD CT250MX200SSD 8,670円
HDD DT01ACA200 7,150円
HDD DT01ACA200 7,311円
HDD DT01ACA200 7,520円
ケース SST-PS11B-Q 6,700円
グリス JP-DX1[ナノダイヤモンドグリス 3g] 1,420円
SATAケーブル TK-SATA3-07SL ×2 1,690円
OS Windows 10 Pro 日本語版 USB 23,600円
    158,457円
  合計 136,476円

 

バランスはいいとは言えませんね。

ただゲームやらないとはいえ5年くらい使うこと想定してるのでビデオカードはGTX 960 でちょうどいいかも。

失敗したのはマザーボードはH170なのにOCモデルのCPUをチョイスしてしまったこと。でも4GHzだから結構サクサクです。

あとここには書いてませんがCPUクーラーを虎徹にしようと思って買ったもののケースに入りませんでした(笑)。自作PCあるあるだそうです。

だから大きめだけどちょうどよく収まるMachoにしました。

なかなか大きな出費でしたね。でも長く使えることでしょう。

 

 

 

 

ブログ始めました

今まで何回かブログを始めました。

でも何週間か放置してしまってて気づいたら退会してました。の繰り返し。

就活も終わったし、最近また始めたくなってまた登録してみました。

今度はいろいろ書いてみたいと思います。

ふと消してみたくなる時あるよね。でもそういうのじゃなかったんだ。

ブログ始めてこれからいろいろ書いてみるぞ!ってなってたのもつかの間。なんだかんだ忙しくなると書かなくてもいいかなってなる。

そしてブログはお墓へ。

退会はしなくてもよかったかもな。

勉強や研究で初めて知ったこと、大事だなって思ったことを忘備録としても書いてみようと思います。

書くことも好きだけど人のブログを見るのも好きなのでいろんな人たちのブログも覗いてみようと思います。

周りの友達でブログやってる人は少ないから残念。あ、やっていても教えないか。