2012年6月20日水曜日


http://www.jimhermann.com/ensim/index10811.htm

http://www.cyberciti.biz/faq/mysql-change-root-password/

2012年6月14日木曜日


運用の人が mysqlのroot のパスワードを伝えずにいなくなり、連絡しても無しのつぶてでスキーマが作れない という時に役立つかもしれません。

 原文 ⇒  How to Reset the Root Password

1.   MySQL サーバを停止します。


kill `cat /mysql-data-directory/host_name.pid`


ps ax |grep mysqld で --pid-file を確認するのも一つの方法です。


/usr/libexec/mysqld --basedir=/usr --datadir=/var/lib/mysql --user=mysql --pid-file=/var/run/mysqld/mysqld.pid --skip-external-locking --socket=/var/lib/mysql/mysql.sock


2.   ~/mysql-init に 下記を記入し保存します。



SET PASSWORD FOR 'root'@'localhost' = PASSWORD('MyNewPassword');



※ このファイルはパスワードの再設定が完了したら削除して下さい。


3.   MySQL サーバを再起動します。

僕の環境では駄目でした。手順書にある第二の方法を試しました。

1.   MySQL サーバを停止します。

2. mysqld にオプションを付けて実行します。

mysqld_safe --skip-grant-tables --user=root

3. mysql -uroot で MySQLのクライアントに入ります。

4. パスワードを変更します。


mysql> UPDATE mysql.user SET Password=PASSWORD('newpwd')
    ->                   WHERE User='root';
mysql> FLUSH PRIVILEGES;

5. MySQL サーバを再起動します。


/etc/rc.d/init.d/mysqld start

 




2012年3月28日水曜日

第58回PHP勉強会@東京に参加した。毎回気づいた時にはいっぱいだったり時期が過ぎていたりで参加は初めてとなりました。発表者だけでなく 全員が自己紹介するのも新鮮でした。人数が30 人という比較的少人数だから出来る業かもしれませんが、心の準備をしておらずドキドキしてしまいました。 感想は別に書くとして 発表された資料を 纏めておきます。 (発表順)

PHP と MySQL でカジュアルに MapReduce する

Phakeで簡単モックオブジェクト作成

入門 PHP 5.4

2012年3月19日月曜日

基本的にPHP Fog へのインストールは 他の共用サーバと同じ様な手順で行う事が出来ます。
ドキュメントルート は ****.phpfogapp.com であり、ファイルのアップロード(デプロイ)は git を使用します。



SOY CMS2を新規インストールする手順

  1. 動作環境を満たしたサーバーを準備する※1
  2. SOY CMS2インストールファイルをダウンロードする
  3. インストールファイルをサーバーへアップロードする
  4. インストールウィザードに従ってインストールを進める

※ SOY CMS2 をインストール するより引用


1. github から SOY CMS2 を PHP Fog のアプリケーションの中にダウンロードする。


# cd ****.phpfogapp.com
# git clone git@github.com:SOYCMS2-dev/SOYCMS2.git


2.  soycms 配下のファイルを ****.phpfogapp.com に移動する

# cd SOYCMS2/soycms
# move * ../../
# cd ../../
# rm -fr SOYCMS2

3.  PHP Fog にデプロイ(アップロード)する

# git add *

# git commit -m "soycmsを展開"
# git push

4.  SOY CMS2のインストールの設定

「サーバによってはドキュメントルートより上に設置する事も可能です」とありますが、PHP Fogの場合はデフォルト(soycms_config)以外には選択肢が無さそうです。

5. 初期管理者の追加

パスワードを設定します。「メールサーバの設定」 は PHP Fog に mail() が使えるとの記述があったので取りあえずデフォルトのままとし特に編集しませんでした 。


6. 初回ログイン

先ほど設定した管理者ID とパスワードを入力します。管理画面のテーマは ベースとなる色を変更する事が出来ます。試してみると理解出来ると思います。

7. サイトの作成

8. データベース種別

mysql を選択します。「Database Connection Info」に書かれている設定情報を参考にします。

次へを押すとエラーが発生しました。直接 サーバ上にディレクトリを作る方法(権限)が無い様です。
サイトを作成するには ローカルの環境で サイトまで作って git push し、mysql をリストアするしか方法は無さそうです。
別の機会に試してみます。今日はここまでとします。



2012年3月12日月曜日

アップデートまでのいきさつ


開発からは7年ほど経過していますが、サーバ自体を去年入れ替えました。ただCentOS5の標準のPHPを使用したため PHPのバージョンは5.1.6 でした。

今まで問題はなかったのですが、Smarty3 にアップグレード した時に問題が発生しました。
具体的には escape 処理を使った時に出力した画面が真っ白になってしまいました。
Smarty3の継承機能が便利な事もあり、 escape が使用出来ない件に関しては目をつぶっていました。

ちょうど、新規開発をするタイミングもあり、原因を調査しようと考えました。
最初にescapeのソースを確認します。

smarty2

function smarty_modifier_escape($string, $esc_type = 'html', $char_set = 'ISO-8859-1')
{
    switch ($esc_type) {
        case 'html':
            return htmlspecialchars($string, ENT_QUOTES, $char_set);


smarty3

function smarty_modifier_escape($string, $esc_type = 'html', $char_set = null, $double_encode = true)
{
    if (!$char_set) {
        $char_set = Smarty::$_CHARSET;
    }

    switch ($esc_type) {
        case 'html':
            return htmlspecialchars($string, ENT_QUOTES, $char_set, $double_encode);


比較すると 関数 htmlspecialchars の double_encode が追加され 引数が異なっています。
double_encode は 5.2.3 からのサポートなのでこれが原因と考えられます。
必要条件には Smarty 3.x: PHP 5.2+ とあるのですが、5.2.3 以降を使用した方が良いかもしれません。

アップデートの手順

CentOS5での手順です。コマンドだけですが。。。

# cd /etc/yum.repos.d/
# wget http://dev.centos.org/centos/5/CentOS-Testing.repo
# yum --enablerepo=c5-testing update php
# httpd -k restart

Apacheの再起動をしないと Apacheモジュールとして動かしているPHP は 古いバージョンのままになります。

引き続き。。。

それはまた別の話。と書いていましたが、何日かして、Fatal error: Call to undefined function mcrypt_get_key_size() が発生しました。原因としては mcrypt のモジュールが存在しないという事のようです。確認してみます。

確認1. yum info php-mcrypt
Installed Packages
Name : php-mcrypt
Arch : x86_64
Version 5.1.6
を見るとインストールはされていますが Version が 5.1.6 と古い為にエラーが起きている様です。

確認2. php -v

#php -v

PHP Warning:  PHP Startup: mcrypt: Unable to initialize module  ← ここ
Module compiled with module API=20050922, debug=0, thread-safety=0
PHP    compiled with module API=20060613, debug=0, thread-safety=0
These options need to match
 in Unknown on line 0
PHP 5.2.10 (cli) (built: Nov 13 2009 11:44:05) 
Copyright (c) 1997-2009 The PHP Group
Zend Engine v2.2.0, Copyright (c) 1998-2009 Zend Technologies

確認の結果 mcrypt を アップデートする事に決めした。

google ます。

wget ftp://ftp.pbone.net/mirror/rpms.famillecollet.com/fedora/9/olds/x86_64/php-mcrypt-5.2.10-1.fc9.remi.x86_64.rpm

この辺は決まり文句。


rpm -e php-mcrypt-5.1.6-15.el5.centos.1.x86_64
rpm -i --nodeps php-mcrypt-5.2.10-1.fc9.remi.x86_64.rpm

確認。

#php -v


PHP 5.2.10 (cli) (built: Nov 13 2009 11:44:05)
Copyright (c) 1997-2009 The PHP Group
Zend Engine v2.2.0, Copyright (c) 1998-2009 Zend Technologies


# rpm -qa |grep php
php-5.2.10-1.el5.centos
php-devel-5.2.10-1.el5.centos
php-pear-1.4.9-6.el5
php-common-5.2.10-1.el5.centos
php-cli-5.2.10-1.el5.centos
php-gd-5.2.10-1.el5.centos
php-ldap-5.2.10-1.el5.centos
php-mbstring-5.2.10-1.el5.centos
php-pdo-5.2.10-1.el5.centos
php-mysql-5.2.10-1.el5.centos
php-mcrypt-5.2.10-1.fc9.remi

一つだけ、fc9.remi となっているのは気持ち悪いが バージョンは揃いました。

アパッチを再起動して確認 ! して画面が正常に表示されました。

英語のサイトですが

http://wiki.centos.org/HowTos/PHP_5.1_To_5.2

を参考にしました。











2012年2月7日火曜日

原文ママ。その内訳すかも。newline at {if} tags は メールとかでここに改行を入れたく無いという時は個人的には邪魔です。


= Known incompatibilities with Smarty 2 =

Smarty 2 との良く知られている非互換性

== Syntax ==

Smarty 3 API has a new syntax. Much of the Smarty 2 syntax is supported
by a wrapper but deprecated. See the README that comes with Smarty 3 for more
information.

Smarty 3 API には 新しい シンタックスがある。

The {$array|@mod} syntax has always been a bit confusing, where an "@" is required
to apply a modifier to an array instead of the individual elements. Normally you
always want the modifier to apply to the variable regardless of its type. In Smarty 3,
{$array|mod} and {$array|@mod} behave identical. It is safe to drop the "@" and the
modifier will still apply to the array. If you really want the modifier to apply to
each array element, you must loop the array in-template, or use a custom modifier that
supports array iteration. Most smarty functions already escape values where necessary
such as {html_options}

== PHP Version ==
Smarty 3 is PHP 5 only. It will not work with PHP 4.

== {php} Tag ==
The {php} tag is disabled by default. The use of {php} tags is
deprecated. It can be enabled with $smarty->allow_php_tag=true.

But if you scatter PHP code which belongs together into several
{php} tags it may not work any longer.

== Delimiters and whitespace ==
Delimiters surrounded by whitespace are no longer treated as Smarty tags.
Therefore, { foo } will not compile as a tag, you must use {foo}. This change
Makes Javascript/CSS easier to work with, eliminating the need for {literal}.
This can be disabled by setting $smarty->auto_literal = false;

== Unquoted Strings ==
Smarty 2 was a bit more forgiving (and ambiguous) when it comes to unquoted strings
in parameters. Smarty3 is more restrictive. You can still pass strings without quotes
so long as they contain no special characters. (anything outside of A-Za-z0-9_)

For example filename strings must be quoted

{include file='path/foo.tpl'}


== Extending the Smarty class ==
Smarty 3 makes use of the __construct method for initialization. If you are extending
the Smarty class, its constructor is not called implicitly if the your child class defines
its own constructor. In order to run Smarty's constructor, a call to parent::__construct()
within your child constructor is required.


class MySmarty extends Smarty {
function __construct() {
parent::__construct();

// your initialization code goes here

}
}


== Autoloader ==
Smarty 3 does register its own autoloader with spl_autoload_register. If your code has
an existing __autoload function then this function must be explicitly registered on
the __autoload stack. See http://us3.php.net/manual/en/function.spl-autoload-register.php
for further details.

== Plugin Filenames ==
Smarty 3 optionally supports the PHP spl_autoloader. The autoloader requires filenames
to be lower case. Because of this, Smarty plugin file names must also be lowercase.
In Smarty 2, mixed case file names did work.

== Scope of Special Smarty Variables ==
In Smarty 2 the special Smarty variables $smarty.section... and $smarty.foreach...
had global scope. If you had loops with the same name in subtemplates you could accidentally
overwrite values of parent template.

In Smarty 3 these special Smarty variable have only local scope in the template which
is defining the loop. If you need their value in a subtemplate you have to pass them
as parameter.

{include file='path/foo.tpl' index=$smarty.section.foo.index}


== SMARTY_RESOURCE_CHAR_SET ==
Smarty 3 sets the constant SMARTY_RESOURCE_CHAR_SET to utf-8 as default template charset.
This is now used also on modifiers like escape as default charset. If your templates use
other charsets make sure that you define the constant accordingly. Otherwise you may not
get any output.

== newline at {if} tags ==
A \n was added to the compiled code of the {if},{else},{elseif},{/if} tags to get output of newlines as expected by the template source.
If one of the {if} tags is at the line end you will now get a newline in the HTML output.



== trigger_error() ==
The API function trigger_error() has been removed because it did just map to PHP trigger_error.
However it's still included in the Smarty2 API wrapper.

== Smarty constants ==
The constants
SMARTY_PHP_PASSTHRU
SMARTY_PHP_QUOTE
SMARTY_PHP_REMOVE
SMARTY_PHP_ALLOW
have been replaced with class constants
Smarty::PHP_PASSTHRU
Smarty::PHP_QUOTE
Smarty::PHP_REMOVE
Smarty::PHP_ALLOW

2012年1月26日木曜日

接続

文字コードの設定

try {
$pdo = new PDO($db_dsn,$db_user, $db_password,
array(
PDO::MYSQL_ATTR_INIT_COMMAND => "SET CHARACTER SET `utf8`"
)
);
} catch (PDOException $e) {
die($e->getMessage());
}

推奨されないらしい

$pdo = new PDO(
'mysql:host=hostname;dbname=defaultDbName',
'username',
'password',
array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8")
);

持続的な接続

検討中。

データベースサーバへの持続的な接続による恩恵をこうむる web アプリケーションは多いでしょう。持続的な接続は、スクリプトが 終了しても閉じられずにキャッシュされ、他のスクリプトが同じ内容の 接続を要求してきた際にそれが再利用されます。持続的接続の キャッシュにより、スクリプトがデータベースを使用するたびに 新しい接続を確立するオーバーヘッドを避けることができます。 それにより、結果として web アプリケーションを高速化できるように なります。

$dbh = new PDO('mysql:host=localhost;dbname=test', $user, $pass, array(
PDO::ATTR_PERSISTENT => true
));

今の所の接続案

$dbh = new PDO('mysql:host=localhost;dbname=test', $user, $pass, array(
PDO::MYSQL_ATTR_INIT_COMMAND => "SET CHARACTER SET `utf8`",
PDO::ATTR_PERSISTENT => true
));

参考

SET NAMESは禁止

2012年1月21日土曜日

[Subversion] .svnファイルを一括削除する

rm -rf `find ./ -type d -name .svn ! -regex \.svn/. -print`

! -regex \.svn/. が ? いらないのでは。

echo rm -rf `find . -type d -name .svn`

find . -type d -name .svn -exec rm -rf {} \;

WEB制作者の苦悩

[Subversion] ブランチをスイッチしたもの(確認方法)

別のブランチの .svn をコピー したらこうなった。

svn stat | awk '$1 == "S"'

svn:ignore

svn propset svn:ignore target .
svn commit -m "Ignored target directory"

svn:ignoreを 再帰的に適用する


-R を使う。./tmp ディレクトリ以下の全てのファイルをバージョン管理から外す。

svn propset -R 'svn:ignore' '*' ./tmp/

2012年1月20日金曜日

1. メールアドレスを入力する


2. Twitter のアカウント名を入力


3. 同期

Send all existing photos to flickr?

4.

2012年1月2日月曜日

序. コンソールアプリとの発言で。。。

XAuthを薦められました。

結局 Twitter 社の認識としては コンソールアプリでやるんだから パスワードを使うXAuth でよくね。
という話らしい。その後食い下がってみたみたけど、返信が来ないのは話は終わりましたよという事か。
そう言う訳で XAutを使ってみました。

何を作ったかは後ほど

XAUth

xAuth provides a way for desktop and mobile applications to exchange a username and password for an OAuth access token. Once the access token is retrieved, xAuth-enabled developers should dispose of the login and password corresponding to the user.

xAuth access is restricted to approved applications. If your application is a desktop or mobile application and the standard web OAuth flow or PIN-code out-of-band flow is not right for you, send a detailed message to api@twitter.com to request xAuth privileges. Include the name of your application, the consumer key, the application ID (if available), and a summary of how xAuth is best-suited for your application.