IE11でファイルが文字化けする。

IE11でダウンロード時に文字化けするという報告がありました。

IE11でのファイルが文字化けするという報告は、検索すればいっぱい出てきて、

IEのブラウザ側で互換表示をしてやると治るという解決方法を進めているサイトがたくさんあります。

しかし、今回は、「互換表示をするという方法を使わずにサイト側でなんとかできないか」というご依頼でした。

 

簡単に「METAタグに互換を仕込めばいっかー」と安請け合いしたのですが、そうはいかなかったです。

レイアウトが崩れる時などにIEの互換表示をサイト側(メタタグ)で制御する方法

そもそも、その環境はXOOPSのfckeditorを使ってファイルリンクを作っていて、transfer.phpを介してファイルダウンロードさせています。

そこでの文字コードの問題かな。だけど、IE11の互換モードを使ってたら、文字化けは解消されるし……

といろいろと調べておりましたが、

IE11でファイルをダウンロードすると文字化けが発生する

が近いのだと思います。

 

前に、XOOPSのSPAWエディターがらみでいろいろ調べていたときに(参照:SPAWエディターが表示しなくなったら)、そんな話があったなぁ。

/common/fckeditor/editor/filemanager/connectors/php/transfer.php を見ます。

L26あたりに

 
if( substr( $GLOBALS['xoopsConfig']['language'] , 0 , 2 ) == 'ja' && strstr( $ua , 'MSIE' ) && ! strstr( $ua , 'Opera' ) ) {
 

とあります。これを

 
if( substr( $GLOBALS['xoopsConfig']['language'] , 0 , 2 ) == 'ja' && (strstr( $ua , 'MSIE' ) || strstr( $ua , 'Trident' )) && ! strstr( $ua , 'Opera' ) ) {
 

に変更します。

これでうまく行きます。

xamppのphpmyadminで「Unknown collation: ‘utf8mb4_general_ci’」と出たら。

他のバージョンのxamppを起動させたりしているうちに、
いつも使うxamppのphpmyadminに
「Unknown collation: ‘utf8mb4_general_ci’」
とうエラーが出ました。

ブラウザのキャッシュやクッキーを削除したら治りましたので、報告しておきます。

ToolbarComponent.php on line 174

cakePHP使ったアプリケーションで

Parse error: syntax error, unexpected T_FUNCTION in Plugin\DebugKit\Controller\Component\ToolbarComponent.php on line 174

のエラーが出た場合は、PHPのバージョンを確かめること。5.3以下だと使えない。

けど、こちらの記事

PHP5.3以上のときだけDebugKitを読み込む

で、PHP5.3以下でも動くようになるようです。

まえにも似たようなことをして、解決したのに、また忘れそうなのでメモメモ!!

SPAWエディターが表示しなくなったら

SPAWエディター使用のXOOPSはだいぶ昔のものだし、セキュリティ的に使っていること自体が問題かもしれませんが、でも、例外もありますので……。

SPAWエディターが、Googlechromeなどの新しいブラウザや、IEのバージョンアップで表示されなくなりまして、まぁ、そういうものかなと、利用する必要がある場合はIEの互換表示でごまかして利用していたのですが、なんかのきっかけでそれに関する記事を発見。

古いCMS環境を最新ブラウザで使うための改造

貴重な資料をありがとうございます。

ということで、ブラウザ判別がひっかかっていたらしいです。そうですね、SPAWの時代にGooglechromeはなかった……。IEのバージョンアップでエディターが表示されなくなったとき、バージョンの判別のスクリプトをいじったりしたことがあったので、それでピンとくるべきだったなぁ……。

ということで、

「class/util.class.php」の「function checkBrowser()」に//▼▼ここから追加▼▼から//▲▲ここまで▲▲を追加。

  function checkBrowser()
  {
    $browser = $_SERVER['HTTP_USER_AGENT'];
    // check if msie
    if (eregi("MSIE[^;]*",$browser,$msie))
    {
      // get version 
      if (eregi("[0-9]+\.[0-9]+",$msie[0],$version))
      {
        // check version
        if ((float)$version[0]>=5.5)
        {
          // finally check if it's not opera impersonating ie
          if (!eregi("opera",$browser))
          {
            return true;
          }
        }
      }
    }
    elseif (ereg("Gecko/([0-9]*)",$browser,$build))
    {
      // build date of version 1.3 is 20030312
      if ($build[1] > "20030312")
        return true;
      else
        return false;
    }
    //▼▼ここから追加▼▼
    elseif (ereg("Chrome",$browser))
	{
		return true;
	}
	elseif (ereg("Firefox",$browser))
	{
		return true;
	}
	elseif (ereg("Safari",$browser))
	{
		return true;
	}
	elseif (ereg("Trident",$browser))
	{
		return true;
	}
	//▲▲ここまで▲▲
    return false;
  }
 

まぁでもそもそもあんまり使わない方がいいとは思うんですが……。
久しぶりにXOOPS関係の記事を書きました。

WordPressのマルチサイトの検証

【サイト構成】

メインサイト(example.com)

├ Aブログ (example.com/a/)

├ Bブログ (example.com/b/)

└ Cブログ (example.com/c/)

メインサイトではA~Cの投稿の最新情報を引っ張って掲載。

 

【確認すること】

このサイト構成で、「WPアプリ」が使用できるか。

 

1.マルチサイトにする。

テスト環境のさくらインターネットを使用。
テスト環境なので、ドキュメントルートではなく、「test」フォルダの中の「wp」というフォルダに、サブドメインをかぶせて使用中。
・・・・・・これがのちのちのエラーに響くとは、予想だにしなかったというか、しとけって感じだけども。

とても親切に説明されている以下のブログ記事を参考にしました。

WordPressのマルチサイトの設定方法|1つのWPで複数のブログを管理しよう(〜ver.4.0)

ディレクトリでマルチサイトにする場合は、「define(‘SUBDOMAIN_INSTALL’, false);」にすることを注意すること以外は、上記記事の説明でさくさく設定できました。

 

2.管理画面にログインしてみる。

メインに、メイン管理者のIDとパスワードでログインすることはできました。

サブサイト(Aブログ)では、まずパソコンからログインしようとすると

googlechromeで「このウェブページにはリダイレクト ループが含まれています」と表示されます。

WordPressをマルチサイトに対応させる場合の注意点

など検索結果の上位にくるいくつかは、「.htaccessの設定は、追加ではなくて上書き」で治ったと。

しかし、それは最初から上書きしてる。でも、「.htaccess」の問題なんだろうなぁ……。

ためしにもう一度、「ネットワークの設置」の「.htaccess」の記述を見ると微妙に違う。

そういえば、.htaccessを入れてから、サブドメインを使うかディレクトリを使うかの設定を変えてしまった気がする。

 

define(‘SUBDOMAIN_INSTALL’, true);(サブドメインを使用する)だったとき

RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]

# add a trailing slash to /wp-admin
RewriteRule ^wp-admin$ wp-admin/ [R=301,L]

RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L]
RewriteRule ^(wp-(content|admin|includes).*) test/wp/$1 [L]
RewriteRule ^(.*\.php)$ test/wp/$1 [L]
RewriteRule . index.php [L]

define(‘SUBDOMAIN_INSTALL’, false);(ディレクトリを使用する)のとき

RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]

# add a trailing slash to /wp-admin
RewriteRule ^([_0-9a-zA-Z-]+/)?wp-admin$ $1wp-admin/ [R=301,L]

RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L]
RewriteRule ^([_0-9a-zA-Z-]+/)?(wp-(content|admin|includes).*) test/wp/$2 [L]
RewriteRule ^([_0-9a-zA-Z-]+/)?(.*\.php)$ test/wp/$2 [L]
RewriteRule . index.php [L]

で、再度やってみるけど同じ……。WP提供のソースのまま入れたけど、そこが間違ってるんだろう。

WordPress 3.5 をマルチサイト化したらループ地獄に陥ったので直す。

を参考にしました。

つまり、私の特殊な環境「test/wp」にサブドメインかぶせてテスト環境にして実行が、ネックになっていて、RewriteRuleの「test/wp」は本来はいらないということです。

RewriteRule ^([_0-9a-zA-Z-]+/)?(wp-(content|admin|includes).*) test/wp/$2 [L]
RewriteRule ^([_0-9a-zA-Z-]+/)?(.*\.php)$ test/wp/$2 [L]

RewriteRule ^([_0-9a-zA-Z-]+/)?(wp-(content|admin|includes).*) $2 [L]
RewriteRule ^([_0-9a-zA-Z-]+/)?(.*\.php)$ $2 [L]

にして、解決。

3.アプリでログインしてみる

あとは、アプリでログインをためしてみるだけ。

ここで私が引っかかったのは、

サイト設定時の「インストール型Wordpressのアドレス」というところ。

ここに、管理画面のアドレス(http://example.com/wp-admin/)を入れてはいけません。

まんまURL(http://example.com/)を入れます。

また、マルチサイトの場合はマルチサイトのURL(http://ecample.com/a/ )を入れます。

これでOK。

WordPress4.3.0にしたらウィジェットが消えた

WordPress4.3.0にしたらトップページに表示していたウィジェット(WP125)が消えました。
デバックをonにしてみたら、

Notice: 呼び出された WP_Widget のコンストラクターメソッドはバージョン 4.3.0 から非推奨になっています! 代わりに
__construct()
を使ってください。 in /usr/home/yabuk864/www/htdocs/wp-includes/functions.php on line 3457

となっています。

WordPress 4.3 Notice Error

↑の記事を読んでいたら、PHP4形式のコンストラクタの記述が非推奨となるため、コンストラクタの記述を__constructに変更するようにということらしいです。

詳しくは↓

https://make.wordpress.org/core/2015/07/02/deprecating-php4-style-constructors-in-wordpress-4-3/

で該当する場所を調べて、

class WP125_Widget extends WP_Widget {

  function WP125_Widget() {
     parent::WP_Widget(
     'wp125',
     'WP125',
     array( 'description' => 'Displays your ads' )
   );
}

となっているのを

class WP125_Widget extends WP_Widget {

  function __construct() {
    parent::__construct(
    'wp125',
    'WP125',
    array( 'description' => 'Displays your ads' )
  );
}

これでエラーは消えるのだけど、ウィジェットは表示されない。

困っていたら、直接テーマファイルに書きこむ方法が親切にプラグインに書いてあったので、そっちに変更しました。

残りのウィジェットの書き方、他のプラグインのソースと見比べたりしたけど、間違ってないように思えるんだけどなあ……。

Unknown collation: ‘utf8mb4_general_ci’

xamppをいくつか使っていて(バージョン違い)、そのうちの一つを立ち上げたときにphpmyadminにアクセスしたら出てきたエラー。

utf8nb4_general_ci なんて知らないぞ(というかその立ち上げたxamppのphpmyadminで指定できる文字コードじゃないぞ)と思って困っていたら、

同じようにお困りの方の掲示板に回答が

http://forums.mysql.com/read.php?35,195219,197613#msg-197613

クッキー消してみたら?ってことだと解釈して。

クッキー消したら、アクセスできました。
他のもっと新しいバージョンのxamppでphpmyadminに接続したクッキーが駄目だったようです。よかった。

mysql_の関数とPHPのバージョン注意。

PHP5.3からPHP5.5になっ(て)たサーバで、

mysql_connect(): The mysql extension is deprecated and will be removed in the future: use mysqli

エラー発生。

mysqli_connect(): にしなさいよということのようです。

【PHP】関数 mysql_… を mysqli_… へ書き換える。

を参考に変更。このとき、「host」と「ポート」を分けることに注意。今までは「host:ポート」だったんですが、ポートは別に必要なのですね。

mysql_で始まる関数は、「mysqli_」に変えたほうがよく(たぶん変数の型が変わっちゃうから、接続を変えたら、次のデータ取ってくる部分とか、データを回すところとか全てに「期待している型と違うんですけど!」というエラーが出ます。

その際、変数の順番も変わることもあるので、エラー文章や関数のマニュアルをよく確認することです。

Warning: mysqli_query() expects parameter 1 to be mysqli, null みたいな「パラメーターが違うんだけどー」というエラー。

 

あと、今回出たのは

「Strict Standards: Non-static method」というエラー。

PEARなどでstrict standards non-static method pearとでるときの対処方法

を参考に、staticの宣言を見直しました。

 

こんなエラー、まだ出てくるかもねぇ。さすがに、cakePHPから外れたところのエラーだったので、まだ私にも直せませたが……。なおらなければどうしようかと思った。

EC-CUBE3.0.2をさくらインターネットにインストールしてみる。

まずはコントロールパネルにて、PHPのバージョンに注意(5.3.9以上でないと駄目)

ファイルをすべてアップロードして、/〇〇〇/html/にアクセスすると、「500 Internal Server Error」が出ます。

htaccessかなぁとか思いつつ、/〇〇〇/html/install.phpにアクセスしてみます。

Warning: date_default_timezone_get(): It is not safe to rely on the system’s timezone settings. You are *required* to use the date.timezone setting or(以下省略)

というエラーが出たので、まずこのエラーをやっつけます。

タイムゾーンが設定されてないエラーです。さくらインターネットでは、php.iniの設定をコントロールパネルからできます。

「PHP設定」から設定します。

phpini

date.timezone=”Asia/Tokyo”

を追加して保存。

再び、/〇〇〇/html/install.phpにアクセスするとインストール画面になります。

ひととおりインストールして、いざ管理画面にアクセスすると、「500 Internal Server Error」が出ます。ためしに.htaccessを削除してみます。

すると「Forbidden」。まぁ、アドレスの関係かぁということで、「/html/index.php/管理画面フォルダ/」でためすと、ログイン画面が表示されました。

modxのコントロールパネルに接続できなくて→PHPバージョン調べよう

久しぶりにmodxで構築しているサイトのコントロールパネルに接続したら、

Deprecated: mysql_connect(): The mysql extension is deprecated and will be removed in the future…(以下省略)

Warning: Cannot modify header information – headers already sent by…(以下省略)

とかエラーがでてまして。

 

本体サイトをあわてて見に行ったけど、そっちは問題なし。コンパネだけ?

と、しらべたら

コンパネに入れない

とまんまの質問があったので、参考にしました。PHP5.5だったら出る現象っぽいです。

 

しかし、サーバーのほう、いつのまにPHP5.5にバージョンアップされたんだろうと思っていたら、

iCLUSTAシリーズPHP5.3から5.5へのバージョンアップについて

と告知されてた。2015年7月22日には完全に切り替えだったみたい。

サーバ契約してる方にはメールが来てるんだろうけど、そういうメールも転送してもらいたいなぁとか思ったり。
レンタルサーバのメンテナンス情報、ちゃんと取得しておかなきゃなぁと思ったり。