Wordpressのwp-config.phpファイルの場所をドキュメントルート以外のディレクトリへ変更する
セキュリティ上、ドキュメントルート以下にwp-config.phpをおいておくのは怖い…
ここではドキュメントルートの2つ以上上位階層への移動の方法を示す。(直上階層まではデフォルトで可能)
まずは、wp-load.phpを編集します。
if ( file_exists( ABSPATH . 'wp-config.php') ) {
/** The config file resides in ABSPATH */
require_once( ABSPATH . 'wp-config.php' );
} elseif ( file_exists( dirname(dirname(dirname(ABSPATH))) . '/wp-config.php' ) && ! file_exists( dirname(ABSPATH) . '/wp-settings.php' ) ) {
/** The config file resides one level above ABSPATH but is not part of another install*/
require_once( dirname(dirname(dirname(ABSPATH))) . '/wp-config.php' );
次に、配置したwp-config.phpを編集。
wp-config.phpのパーミッションは755に設定します。
/** WordPress absolute path to the Wordpress directory. */
if ( !defined('ABSPATH') )
define('ABSPATH', dirname(__FILE__) . '/www/hoge/hoge/');
/** Sets up WordPress vars and included files. */
require_once(ABSPATH . 'wp-settings.php');
Get変数を渡すページをCakePHPのURL形式へ変換する.htaccess(mod_rewrite)の記述方法
これまでSmartyなどを使っていたウェブサイトをリファクタリングし、CakePHPへ移行する場合などに困ることがとして。
Get変数を使ったページを、CakePHP特有のURL記法(host/Controller/Action/Var)へ変更する際、
.htaccessを使って、リダイレクトする必要がある。
CakePHPのなかには、.htaccessがデフォルトで3つ含まれている。
結論から話すと、/webroot/直下の.htaccessにリダイレクトの処理を追加することとなる。
デフォルトでは以下のようになっている。
/webroot/.htaccess <IfModule mod_rewrite.c> RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.*)$ index.php [QSA,L] </IfModule>
Redirectそのもの解説として、おせっかいながら各行の意味を説明すると
<IfModule mod_rewrite.c> # Apache が mod_rewrite モジュールを使用できるかどうか RewriteEngine On # mod_rewrite を有効にする RewriteCond %{REQUEST_FILENAME} !-d # リクエストしたURLのディレクトリが存在しない場合は RewriteCond %{REQUEST_FILENAME} !-f # リクエストしたURLのファイルが存在しない場合は RewriteRule ^(.*)$ index.php [QSA,L] # index.php へRedirectする </IfModule>
ここに、今回はget変数でIDを渡していたページを、CakePHPのURLの記述へ変更。
かつ、idが変更になった場合の処理を例示します。
<IfModule mod_rewrite.c> RewriteEngine On # redirect the access to RewriteCond %{REQUEST_URI} jump.html # jump.html に対して RewriteCond %{QUERY_STRING} ^id=4 RewriteRule ^(.*)\.html$ $1/8? [NE,R=301,L] # hoge.html?id=4 へのアクセスを hoge/8 へリダイレクトする # RewriteRule末尾の"?"はQueryStringを後ろへ付けないの意味 RewriteCond %{QUERY_STRING} ^id=(\d+) RewriteRule ^foo.html$ foo/%1? [NE,R=301,L] # foo.html にアクセスしてきたGet変数を、"/"以下に付加する # ex. foo.html?id=48 -> foo/48 RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.*)$ index.php [QSA,L] </IfModule>
なおRewriteRuleのQSAオプションは、{QUERY_STRING}を渡してしまうため、Redirect先のURLに
QSAオプションは外すように注意してください。
CakePHP のFormHelperで任意のControllerを使用する方法
公式ドキュメントにも記載されていますが、
案外はまってしまうことも多い仕様のため、自戒の意味で。
FormHelper — Cookbook v2.x documentation
FormHelperのControllerおよび、actionを自由に変更する方法。
<?php echo $this->Form->create(null, array('url' => '/recipes/add')); // or echo $this->Form->create(null, array( 'url' => array('controller' => 'recipes', 'action' => 'add') ));
MAMP環境下でMySQLのテーブル文字化けをターミナルから修正する
MacOS Lion環境下で、ターミナルからMAMPのMySQL文字コードを変更するフロー
$ cd ~/Applications # 次の処理はApplicationsディレクトリ下のMAMPのインストールを確認するフロー $ find /Applications -type d -name "MAMP" # MAMPのディレクトリへ移動 $ cd /Applications/MAMP/ # mysqlのあるディレクトリへ移動 $ cd ./Library/bin/ # mysqlの実行 $ ./mysql -u root -p Enter password: password mysql> USE database_name; # テーブルの情報(CHARSETを含むを確認) # おそらく、文字化けを起こしているような場合は CHARSET=latin1 となっている mysql> SHOW CREATE TABLE table_name; # 文字コードをutf8へ変更(utf-8ではないので注意) mysql> ALTER TABLE table_name CONVERT TO CHARACTER SET utf8; mysql> exit;
ちなみに、CREATE TABLE を実行する際のオプションで文字コードを設定するには
CREATE TABLE `table_name` ( `id` int(11) NOT NULL auto_increment, `name` varchar(200) NOT NULL default '0', ) ENGINE=MyISAM AUTO_INCREMENT=1, CHARACTER SET=utf8;
のように、オプションとして付け加えることができる。
基本的に、my.cnfで文字コードを設定していれば問題ないが、
phpmyadminなので、例外的に文字化けを起こすことがあるので、その際の処方箋として。
Terminal からApplicationへアクセスする
使用しているOSはLionになります。
あまり、適切な解放が紹介されていないようです。
http://stackoverflow.com/questions/641017/unable-to-find-applications-folder-in-macs-terminal
find /Application -type d -name "*.app"
CakePHPのModel::hasAny()について
Model::hasAnyとは
Cake/lib/Model/Model.phpを参照すると以下のように定義されている。(2597行目)
public function hasAny($conditions = null) { return ($this->find('count', array('conditions' => $conditions, 'recursive' => -1)) != false); }
つまり、$conditionにフィールドと、値を配列で渡すと、その値に一致するレコードがあるかどうかを返してくれる。
デフォルトで
>||php||
recursive => -1
|
jQueryで(nの倍数)番目の要素だけに処理する
jQueryで(nの倍数)番目の要素だけに処理する
例えば、4の倍数番目だけmargin-rightを取り除くといった処理。
$('.book_container').each(function(i){ if(((i+1)%4) == 0){ $(this).css({'margin-right': '0px'}); } });
DOMに対してeachでループする際、functionの引数にそのDOMのIndexを渡すことができるようだ。
次のサンプルも同じ動作をする。
$('.book_container').each(function(){ if(($(this).index()+1)%4 === 0){ $(this).css({'margin-right': '0px'}); } });