Warning: Use of undefined constant ddsg_language - assumed 'ddsg_language' (this will throw an Error in a future version of PHP) in /home/ezic/ezic.info/public_html/w.ezic.info/wp-content/plugins/sitemap-generator/sitemap-generator.php on line 44
開発日々の走り書き~ | EZiC[イージック]コンテンツ紹介!

開発日々の走り書き~

apacheによるリダイレクト設定

apacheのconfファイルのvirtual host設定を以下のように書く

<virtualhost xxx.xxx.xxx.xxx>
  ServerName redirect-domain.sample.com
  Redirect permanent / http://migration-domain.sample.jp/
</virtualhost>

xxx.xxx.xxx.xxx ・・・ 自分のウェブサーバーのIPアドレス
redirect-domain.sample.com ・・・ リダイレクト元になるドメイン
http://migration-domain.sample.jp/ ・・・ リダイレクト先のURL

これにより、

http://redirect-domain.sample.com/

http://redirect-domain.sample.com/abc.html

http://redirect-domain.sample.com/abc/abc.html

http://migration-domain.sample.jp/

http://migration-domain.sample.jp/abc.html

http://migration-domain.sample.jp/abc/abc.html

にリダイレクトされます。

「mysqlnd」を使ったPHPによるMySQL接続方法

前回の記事にも書いたが、PHPを5.5にアップデートすると、
「php-mysql」が「php-mysqlnd」に置き換わるため、
以前のMySQLで作られていたユーザーのパスワードが古い形式のままの場合、
DBへ接続できない現象
が発生する。

※yumによるアップデート

php-mysqlnd  i686  5.5.0-0.28.beta4.el6.remi  remi-test  248 k
  replacing  php-mysql.i686 5.4.14-1.el6.remi

DB(mysql-userテーブル)を見てみると、
rootのパスワードは新形式の長いタイプのパスワードだが、
その他は短い古い形式のパスワードだった。

★ユーザーパスワードの確認 (DB:mysql / table:user)
image

★旧形式と新形式のパスワードの違い
image image

よってパスワードを新形式へアップデートする事で解決できる!
 ※DB変更後は、必ずMySQLのサービスを再起動!

SQL:
  1. SET PASSWORD FOR '対象のユーザー名'@'対象のホスト名' = PASSWORD('対象となるユーザのパスワード');

※上記SQLでOKだが直接updateしても変更できる、というか上の方がスマートだと知らなかった^^

SQL:
  1. UPDATE
  2.     `mysql`.`user`
  3. SET
  4.     `Password` = PASSWORD ('対象となるユーザのパスワード')
  5.     WHERE
  6.         `user`.`Host` = '対象のホスト名' --(ユーザー名がユニークの場合は必要なし)
  7.     AND `user`.`User` = '対象のユーザー名'
  8. ;

PHPからMySQLに接続できない:mysqlnd

remi-testからPHP5.5にアップデートすると、PHPからMySQLのデータベースに接続できない事態が発生した。

理由は以下の通り。

 ・「php-mysql」が廃止されて、「php-mysqlnd」に置き換わった
 ・「php-mysqlnd」でmysql_connect()系関数を使用した際、MySQLの古いパスワードフォーマット(16バイト)を使うとDBに接続できない

ソース:PHP:下位互換性のない変更点

よって対処方法としては、

 1.「php-mysqlnd」を使わないで「php-mysql」を使う
  ※今後の事を考えれば「php-mysqlnd」を使ったほうがいいかもしれない・・・

 2.MySQLのパスワードを設定し直す

SET PASSWORD FOR 'username'@'hostname' = PASSWORD('パスワード');

 ※ただし、「my.cnf」に

old_passwords=1

  とある場合は旧パスワードが有効になっているので、

old_passwords=0

  と無効にする必要あり。設定が有効の場合に旧パスワードで設定するには

SET PASSWORD FOR 'username'@'hostname' = OLD_PASSWORD('パスワード');

  で設定すればOK。

Windows7が勝手にシャットダウンされてしまう

★参考URL
 ・[Windows7 FAQ]
自動再起動させない方法-Windows7
 ・[チューバやパソコンの日々] 自宅のWindows7が勝手にシャットダウンする・・・
 ・[sssss] windows 7 が勝手にシャットダウンされてしまう
 ・[Windows デベロッパー センター] windows 7 が勝手にシャットダウンされてしまう。
 ・[WIN1@Codename] WIN1@Codename カーネル電源マネージャーがシャットダウンへの切り替えを開始しました

ext4のファイルシステム修復方法

ファイルシステム:ext4の修復方法(コマンド)

fsck -yt ext4 /dev/sdb

★外付けHDDにアクセスするとエラーが発生してOSダウン
image

★OS再起動後、修復コマンド実行
image

————————————————–
★参考URL
 ・[CodeZine(コードジン)] fsck ファイルシステムのチェックと修復を行う – UNIXコマンド辞典
 ・[ITpro] Linuxコマンド集 – 【 fsck 】 ファイル・システムの検査と修復を行う

PHPによるCSVファイルの読み込み

PHPでCSVファイルを読み込む
 ※「fgetcsv」関数の第3引数にてセパレート文字変更可

★読み込みサンプルCSV(sample.csv)

111,222,333
AAA,BBB,CCC

★PHP

PHP:
  1. // 読み込むCSVパス
  2. $read_csv_path = './sample.csv';
  3.  
  4. // CSVファイルを読み込む
  5. $fp = fopen($read_csv_path,'r');
  6. $count = 0;
  7. while($arr = fgetcsv($fp, 1000, ',')){
  8.     $csv[$count] = $arr;
  9.     $count++;
  10. }
  11.  
  12. // 読み込んだCSVをテスト出力
  13. echo '<pre>';
  14. var_dump($csv);
  15. echo '</pre>';

★出力結果

array(2) {
  [0]=>
  array(3) {
    [0]=>
    string(3) "111"
    [1]=>
    string(3) "222"
    [2]=>
    string(3) "333"
  }
  [1]=>
  array(3) {
    [0]=>
    string(3) "AAA"
    [1]=>
    string(3) "BBB"
    [2]=>
    string(3) "CCC"
  }
}

bashによるload_averageログ収集

# ログの保存先パス設定
log_save_path='/var/log/load_average/'
# ログを保存(ファイル名に日付を入れる:例.20130203)
uptime >> $log_save_path$(date +%Y%m%d ).log

これをcronを使って回せばload_averageログを収集できる

PHPによる時間範囲を指定した条件

ファイルのタイムスタンプを取得して
その取得ファイルの中から指定の日時を抽出したいなど、
PHPによる時間範囲指定したいケースがあるかと思います。
 ※SQLならbetweenで簡単ですけどね~

PHP:
  1. // タイムスタンプを調べたいファイルパスを指定
  2. $file_path = '/var/www/html/';
  3.  
  4. if($dir = opendir($file_path)){
  5.     while(($file = readdir($dir)) !== false){
  6.         if($file != '.' && $file != '..'){
  7.             // タイムスタンプ取得
  8.             $get_unix = filemtime($file);
  9.                
  10.             // 時間範囲を指定
  11.             if(strtotime('2013-02-01 22:30:00') <= $get_unix && $get_unix <= strtotime('2013-02-01 22:40:00')){
  12.                 echo $file.'は「2013/02/01 22:30:00」 ~ 「2013/02/01 22:40:00」 の間のファイルです['.date('Y/m/d H:i:s',$get_unix).']<br />';
  13.             }else{
  14.                 echo $file.'は「2013/02/01 22:30:00」 ~ 「2013/02/01 22:40:00」 の間のファイルではありません['.date('Y/m/d H:i:s',$get_unix).']<br />';
  15.             }
  16.         }
  17.     }
  18. }

★参考URL
 ・[本を買わずに解決するWeb制作の小技] phpで日付・時間を比較する方法

シンボリックリンクを削除する注意点!

シンボリックリンクを削除する際には、
指定を間違えると実体ファイルまで削除されてしまうので要注意!!
 ※要するにスラッシュが有るか無いか

★シンボリックリンクのみ削除
rm -rf SymbolicName

★シンボリックリンク先の実態ディレクトリも削除
rm -rf SymbolicName/
タイトルとURLをコピーしました