「PHP」カテゴリーアーカイブ

Coreserverがアップグレード、仕様変更でPHPのセーフモードがOFFに

Coreserverから届いたメールによると、2014/6/3のメンテナンスで、PHPのバージョンアップとともに今までセーフモードの設定がOFFになるとのことです。

WordPressなどの利用でCGI版を使ったり、.htaccessに追加で記述が必要だった点が改善されると思われます。(以前はこのように対処していました)

Coresererはデータベース数やマルチドメインなど、制約が少ないレンタルサーバーという印象があります。ドメイン取得にValue-Domainを使った流れでCoreserverを選択するケースもあると思います。

この改善で、Wordpressをとりあえず置くといった使い方をするのに向いた仕様になります。一番安いCore-Miniであれば、月額198円(税抜き、1年払い)で運用できます。

PHPの配列で一致するものだけを残す array_intersect()

array_intersect()を使って、PHPの配列で両者に一致するものだけを探し、新たな配列として返します。

array_a = array(1,2,3,4,5,6);
array_b = array(1,3,5,7,9);
array_c = array_intersect(array_a,array_b);

array_cには(1,3,5)が入ります。元々のarray_aとarray_bは変化しません。
連想配列でも使えますが、第1引数のキーで出力されます。

array_d = array('w' => 1,'x' => 2,'y' => 3,'z' => 4);
array_e = array('m' => 1,'n' => 3,'l' => 5);
array_f = array_intersect(array_d,array_e);
array_g = array_intersect(array_e,array_d);

array_fには(‘w’ => 1,’y’ => 3)が、array_fには(‘m’ => 1,’n’ => 3)が入ります。

CoreserverのCGI版PHPを5.4に

現在、CoreserverのPHPはモジュール版でバージョンが5.2です。CGI版を選択することで、バージョンを選択することができます。例えば、5.4を使いたい場合は、.htaccess に以下のように記述します。


AddHandler application/x-httpd-php54cgi .php

 

これでPHPは5.4が選択されます。同様に、x-httpd-php54cgiをx-httpd-php53cgiとすれば、5.3を指定することができます。Coreserverのモジュール版はセーフモードで動いているため制約が多く、上記のようにCGI版で動かすことが多くなっています。モジュール版の方が負荷が少なく503エラーなどは出にくくなると思いますが、融通が利くのはCGI版だといえます。

 

Javascriptを圧縮するときの注意メモ

Javascriptを圧縮する際の注意点のメモです。

  1. 行の最後に;(セミコロン)を付ける。
    jQueryなどで1行が長くなったりする場合に忘れやすいです。
  2. PHPのコードが入っていても大丈夫。
  3. <script>タグの後の<–の後に改行を入れる。
    スクリプトとしてブラウザが認識しなくなります。
  4. 難読化はあまり期待しない。
    基本的にはコメント、空白、改行の除去で圧縮をします。
  5. 圧縮前と後のバージョンの管理に注意。
    面倒でも圧縮後のファイルの変更は行わない。

jsonの内容をダンプ表示(javascript,jQuery)

jQuery + PHPでサイトを構築するときに便利なのがjsonです。jQueryからPHPにpostしてその結果をjson形式で取得するとjQuery(javascript)で簡単に配列にすることができます。

デバッグや開発中のときには配列の内容をキーとともに表示したいときがあります。PHPの場合はprint_rを<pre>タグと一緒に使うことで表示できます(以前の参考記事)が、javascriptの場合は少しだけ工夫が必要です。

今回使わせていただいたのはJKL.Dumper です。以下のようにすることでダンプを出力できます。PHPの時のように<pre>タグを使うとより見やすくなります。

事前にjkl-dumper.jsを読み込んでおきます。

 <script type="text/javascript" src="jkl-dumper.js"></script> 

id=’dump’にjQueryで表示させます。

jQuery('#dump' ).html('<pre>'+(new JKL.Dumper().dump(data))+'</pre>');

BackWPupからWordPressを復元

WordPressを最新に使用とアップデートしよとしたところ、どういうわけか更新がうまくいかず、ダッシュボードにも入れない状態になりました。

Fatal error: Call to undefined function load_textdomain() in *******/public_html/www.example.com/wordpress/wp-includes/load.php on line 726

このような表示が出てしまいました。load_textdomainという関数を記述したファイルが見つからないと訴えています。プログラムの一部が消えてしまったのかもしれません。

仕方が無いので、BackWPupで保存してあったファイルを復元しました。BackWPupはバックアップごとにzipファイルを作り、その中にサイトの構造と、データベースのバックアップであるsqlファイルをひとまとめにしています。

データベースはそのまま保存されているようなので、最新のzipファイルをローカルで展開してftpでアップロードしました。その後、「データベースの更新が必要」ということで一度だけ「更新」ボタンを押したところ、無事に復元されました。ただし、プラグインはインストールはされるものの、有効化されていませんので、再度有効化する必要があります。

インストールしたプラグインやアップロードしたファイル、テーマなども保存、復元が可能ですので非常に心強いプラグインです。

PHP 5.3からはmb_regex_encodingの指定をした方がよい

PHP 5.2で動いていたページが5.3にバージョンアップしたところ、以下のようなエラーを出すようになりました。

Warning: mbregex compile err: premature end of regular expression ...

正規表現に使用する文字コードをしていないことが原因です。

mb_regex_encoding("UTF-8");

このような一文を入れたところ解決しました。

日本語を扱う場合は、最初の方にmb_internal_encodingとmb_regex_encodingをお約束のように記述することが良さそうです。

SJISからUTF-8への文字コード変換にはsjis-winを指定する(PHP)

Webサイトの作成でやっかいなのがS-JIS(シフトJIS)の取り扱いです。以前はPCの文字コードがS-JISだったり、ケータイサイトはS-JISしか使えなかったりしていましたが、現在ではUTF-8等を使うことが多いと思います。

PHPで文字コードの変換にはmb_convert_encodingを使いますが、このとき、以下のようにすると一部の文字で文字化けが生じます。

mb_convert_encoding($str, 'utf8', 'sjis');

どうやら、拡張文字の扱いで文字化けが生じるようです。以下のようにすると、解決します。

mb_convert_encoding($str 'utf8', 'sjis-win');

具体的に影響のある文字として、「髙」「黑」「①」「Ⅰ」などがあります。