PHP

EZiC

過去の【備忘録】一覧

<JavaScript>について <jQuery>に関して <Ruby>について <Ruby on Rails>に関して <PHP>について <Laravel>に関して <MariaDB/MySQL>について <Dock […]
EZiC

マサの3つの『ツイッター録』<食洗機・Docker・Laravel>【3】

食洗機も超音波で!? 超音波洗浄は洗剤なしでも、食器などを洗浄可能との事。 何というかスゴイものが出てきたな😅 Dockerのコマンド 最近良く開発でDockerを使っているので、しっかり覚えていきたいですね。。 Lar […]...
EZiC

【Laravel備忘録】Formsヘルパーの「Class ‘Form’ not found」

★環境 PHPフレームワーク:Laravel 8.x Laravelでヘルパー関数である「Forms & HTML」を使ったらエラーになりました。 一部コードを抜粋します。 理由はとても単純です。 コンポーネント […]...
EZiC

【Laravel備忘録】「laravelium/sitemap」でサイトマップインデックスがフルパスにならない問題

★環境 PHPフレームワーク:Laravel 8.x ライブラリー: laravelium/sitemap サイトマップ保存先: /public/storage/sitemap/ Laravelで「laravelium/ […]
EZiC

【備忘録】Eclipseの「PHP 言語ライブラリー」のバージョン変更方法

★環境 Eclipse:Version: 2020-12 M1 (4.18.0 M1) EclipseでPHPの開発をしてますが、phpファイルの中には正しい書き方なのにエラー表示されています。 これは、Eclipseの […]
EZiC

【Docker備忘録】nginxで複数ポートで複数サイトを設定する

コンテナ仮想化ソフト「Docker」を使って、その上で「nginx」を動かし、「Laravel」によるアプリケーション開発をしています。 Laravelアプリを複数開発する際、「laradock」の「.env」の「APP […]...
EZiC

【PHPエラー備忘録】HTTP ERROR 500「Allowed memory size of xxxxxxxxx bytes exhausted」

Laravelで開発中にエラーが発生しました。 ★環境 ベースOS:Linux(CentOS7) ウェブサーバー:Apache 2.4 PHP:7.4 Laravelでは、デバッグモードをオンにしていれば、エラー箇所が表 […]
EZiC

【Laravel備忘録】MariaDBエラー「General error: 1615 prepared statement needs to be re-prepared」

PHPフレームワーク「Laravel」において、データベース「MariaDB(MySQL)」にて発生したエラーについてです。 General error: 1615 prepared statement needs to […]

【Laravel備忘録】Laradockの「php artisan migrate」のエラー解消

「Laradock」でLaravelの環境を構築する際、「php artisan migrate」を実行したらエラーが発生しました。 その解決までの軌跡を記します。 ★環境 ベースOS:Windows10 プラットフォー […]

【PHPエラー備忘録】Fatal error: Allowed memory size of 41943040 bytes exhausted (tried to allocate 12288 bytes)

このブログのサーバーでPHPの「500 Internal Server Error」が発生しました。 常にエラーが出るわけでなく、ここ最近たまに出るエラーです。 このページは動作していませんblog.ezic.info […]

「Crayon Syntax Highlighter」と<pre>タグで表示がくずれる問題

WordPressのプラグインでプログラミングコードを表示するのに便利な「Crayon Syntax Highlighter」。 当サイトでも使用してますが、いつの間にか、このプラグインのせいで表示が崩れることになってま […]

【WordPress】今使っているプラグインとプラグインを外しコードを記述して代用したもの – Shufulife

【WordPress】今使っているプラグインとプラグインを外しコードを記述して代用したもの – Shufulifeコンテンツ関連のプラグイン記事内やサイドバーなど、ブログを構成する上で使っている...

PHP: 下位互換性のない変更点 – Manual

#PHP

PHP5.6からPHP7へ移行!!

PHP5.6からPHP7へ移行してみた。 [参照] PHP: PHP 5.6.x から PHP 7.0.x への移行 – Manual [参照] PHP7.0がでたので、いまどきの「普通」のPHPの話。 […]

Smartyにおけるテンプレート側での多次元配列の書き方

下記の2通りは同じ結果になる。 PLAIN TEXT HTML: {$val['one']['two']} { […]

「WordPress」で「sitemap.xml」がメモリオーバーで生成されてなかった

「WordPress」の「sitemap.xml」(サイトマップ)をプラグイン「XML Sitemap Gen […]

サイト更新:電卓相性チェッカー

「電卓相性チェッカー」を更新した! ※更新内容  ・相性にランクとアドバイスメッセージ???を付けた ★電卓相 […]

サイト制作:正確な年齢チェッカー alpha1

小数点を含めた正確な年齢を知りたい! そんなあなたの為に作りました^^ ★正確な年齢チェッカー (alpha1 […]

「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. ;

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

前回の記事にも書いたが、PHPを5.5にアップデートすると、 「php-mysql」が「php-mysqlnd […]

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。

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

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

PHP5.5系のアップデートでMySQLへ接続できず!!?

タイトル通り、先程PHPのバージョンを「remi-test」リポジトリから5.5系へアップデートしようとしたら、
データベース接続確立エラー」が表示されてしまった・・・

ちなみにWordPress以外で動いているPHP系サイトもMySQL接続エラー発生。
ログを見ても特に怪しいものを発見できなかった。
ただ、phpMyAdminは動作していた。。

思うに、

Replaced:
  php-mysql.i686 0:5.4.13-1.el6.remi 

---
Package php-mysql-5.4.14-1.el6.remi.i686 is obsoleted by php-mysqlnd-5.5.0-0.25.beta3.el6.remi.i686 which is already installed.

この辺が怪しい・・・

php-mysql」が廃止されて、「php-mysqlnd」に置き換わったとの事。

この「php-mysqlnd」を調べると、

※抜粋:PHP:下位互換性のない変更点

新しい mysqlnd ライブラリは、MySQL 4.1 用の41バイトの新しいパスワードフォーマットを使用します。 古い16バイトのパスワードを使うと、 mysql_connect() 系の関数は次のようなエラーメッセージを生成します。"mysqlnd cannot connect to MySQL 4.1+ using old authentication"

とある。

すなわち!

古いパスワードフォーマットだったからMySQLに接続できなくなった!!

というわけだ。

取り急ぎパッケージのダウングレードしたが、
迂闊なアップデートはやっぱり恐ろしいね~

※解決方法PHPからMySQLに接続できない:mysqlnd

スポンサードリンク

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"
  }
}

Conditions by timestamp by PHP

PHP:
  1. // Specifies the file path where PHP wants to check the timestamp
  2. $file_path = '/var/www/html/';
  3.  
  4. if($dir = opendir($file_path)){
  5.     while(($file = readdir($dir)) !== false){
  6.         if($file != '.' && $file != '..'){
  7.             // Get timestamp
  8.             $get_unix = filemtime($file);
  9.                
  10.             // Specify the time range(condition)
  11.             if(strtotime('2013-02-01 22:30:00') <= $get_unix && $get_unix <= strtotime('2013-02-01 22:40:00')){
  12.                 echo $file.' is 「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.'is not「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. }

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で日付・時間を比較する方法

タイトルとURLをコピーしました