最近ようやくPHPのオブジェクト指向の勉強を始めまして。遅ぇよ!ってな話ですが、「人生に遅すぎることはない」という安藤百福氏の名言を引用して話を先に進めたいと思います。

さて、オブジェクト指向ということは「クラスを作って、それをオブジェクトとして呼び出す」ということになります。

1.普通に(動的に)呼び出す

newでクラス名を指定してインスタンスとして呼び出します。
(砂の状態のイマジンに対して、契約して実体化させるようなイメージです。)

<?php
 
$y = new dacelo();
$y->test();
 
class dacelo {
        public $name = 'dacelo';
        function test() {
                echo "hello\n";
                echo $this->name;
        }
}

実行結果

hello
dacelo

daceloクラスの中では、メンバー変数としてnameが設定され、クラスの中でそれを$thisで呼び出しています。

2.スタティックに呼び出す

<?php
dacelo::test();
 
class dacelo {
        public $name = 'dacelo';
        function test() {
                echo "test\n";
                echo $this->name;
        }
}

実行結果

test
PHP Fatal error:  Using $this when not in object context in /home/dacelo/tmp/test.php on line 14
Fatal error:  Using $this when not in object context in /home/dacelo/tmp/test.php on line 14

メソッド(クラスの中の関数)を直接呼び出すには、コロン:を2つ付けて呼び出します。
このとき、インスタンスを作成していないので、$thisが使えません。フェイタルエラーになります。
$thisが自分として指し示すべきオブジェクトが存在していないということですね。

ではこのスタティック呼び出しはどういうときに使うかというと、クラスの中のメソッドのみを、関数のように使いたいという時に使います。
普通にその辺にぽっこり用意している関数との違いは、クラスでカプセル化することによって、名前空間の解決(関数名が被ったりしない)ということです。

以上!Ciao!

WordPressで、管理画面と任意のURLを自動的にHTTPにしてくれる便利プラグイン、AdminSSL。個人サイトではあまりSSL自体使いませんが、お問い合わせページ等でHTTPS必須の企業サイトでWordPressを使っている場合は必須のプラグインなんじゃないでしょうか。

さて、そのAdminSSLを有効にしたら、ブラウザが「自動転送が無限ループ」で終了してしまった場合。
これはたいていの場合、単純にブラウザのクッキーを一端削除すれば直ります。

それでも直らない場合は、こちらを。

plugins/admin-ssl-secure-admin/includes/https.php

//$tmp1[] = “wp-login.php”;

をコメントアウトすることで回避。

Admin SSLのログインでループ | 江島@システム開発

それでも直らない場合、WordPressのコアファイルをドキュメントルートではなく1階層下(例:URLはhttp://example.comだけどWordPressはhttp://example.com/wordpress/などの場合)に出るエラーの可能性があります。これの対処法は現在のところ「siteurlとhomeを同一にしよう」、つまりWordPressもDocumentRootに置こう、ということしかありません。

phpだと、スクリプト内に他のスクリプトを読んでくるときは
include()
require()
などを使います。

シェルスクリプトの場合

シェルスクリプトでは、中に書かれているのは全てシェルのコマンドなので、中でもシェルを実行するようにすればいいわけです。
例えば

test.sh
include.sh

というスクリプトがあり、test.shの中でinclude.shを使いたい場合は

source include.sh

もしくは

. include.sh

などすればOKというわけですね。

apacheのトリビア

In: apache

27 1月 2010

apacheのServerAliasには、果たしてどのくらいまで登録できるのか?
検証してみました。
【結論:8719byteまでOK】
ドメイン数ではなく、文字数で限界が設定されていました。

IEでは、setAttributeが使えないと言うことが判明。
setAttributeは、第1引数で指定したプロパティの属性を第2引数に書き換えるメソッドで、クリックしたらある部分を非表示にする(display:none)とかで使えるかと思ってたんですが、実はIEでは使えなかった。
この場合IEでは、代わりにstyle.cssText=”"という記述にする必要があります。これはIE以外でも使えるのでこっちに統一せざるを得ませんね。

例:id:hogehogeの部分を非表示にしたいとき

<button id="detail_btn" onclick="javascript:displayNone(); return false;">
非表示にする
</button>
 
<div id="hogehoge">
ここが非表示になる
</div>

function displayNone の中身は

これが

document.getElementById("hogehoge").style.cssText = "display:none;";

こうなる

document.getElementById("hogehoge").setAttribute("style","display:none;");

手っ取り早く、ページ内に他のページのヘッダー部分とかメニューの一部とかを表示したい、と思うことが結構あるので、再利用できるように関数化しました。

function ripping_html($source,$start,$end){
$html_source = file_get_contents("$source");
$rip_source = preg_replace('/\n/', ' ', $html_source);
$pattern= "/$start(.*)$end/";
preg_match($pattern, $rip_source, $match);
echo $match[0];
}

使い方

引っ張ってくる対象ページのURLと、HTMLソース内の開始シグナル、終了シグナルを引数で指定します。

string ripping_html  ( resource $context, string $start , string $end )

ripping_html('http://blog.dacelo.info/example.html', '<html>', '<end>');

最近、自力でWebサービスを作ってみたいなあ、ということでCakePHPをちょこちょこいじってます。
参考書としては、まずは入門編ということでakiyan.comのakiyanさんこと秋田真氏の本


Fast CakePHP

を見ていたんですが、この本は1.1系用なのでちょっと古いところがあるんですね。

サンプルチュートリアルのタスクリストアプリケーションを作ってたんですが、こんなエラーが出ます。

Warning (512): Method HtmlHelper::input does not exist [CORE\cake\libs\view\helper.php, line 148]

1.2系になってHTMLヘルパーの仕様が変わったようで、$htmlじゃなくて$formというのを使います。

1.1
input(‘Task/content’) ?>
submit(‘タスク追加’) ?>

1.2
input(‘Task/content’) ?>
end(‘タスク追加’) ?>

これでOKです。

皆様、明けましておめでとうございます。いやぁ、早いものでこのブログも2年目なんですね。今年もちょぼちょぼと更新してまいりますのでよろしくお願いいたします。

さて、今回はsafe_modeについて。
phpのsafe_modeは、PHP6で正式に削除されることが決定しているので、使わないことが推奨されているんですが、まぁ諸々の事情で使わざるを得ないことがあります。
通常、php.iniでon/offを切り替えるんですが、使うんであれば限定的に、あるサイトのバーチャルホストの中だけで有効にしたい、というような気持ちってありますね。

そんなときは、httpd.confにて次のように書きます。


DocumentRoot /home/blog.dacelo.info/
ServerName blog.dacelo.info

AllowOverride All
Options ExecCGI FollowSymlinks


php_admin_flag safe_mode on

これで、blog.dacelo.infoの中でだけsafe_modeがonになりました。

WorePress2.7以降から導入された『自動アップデート』はとても便利な機能なんですが、アップデートの途中でネットワークが切れたりなどして終わってしまうと、こんなエラーが出てにっちもさっちもいかなくなります。

Briefly unavailable for scheduled maintenance. Check back in a minute.

コンソールやFTPから、手動で最新ファイルに上書きしてもこのエラーは消えてくれません。管理画面へのログインも出来ない。

これは、自動アップデートをする際のロックファイルがドキュメントルートに残ったままになってしまうのが原因です。

WordPressの自動アップデートは、アップデート中にアクセスがあって不具合が生じるのを防ぐために、自動アップデートの開始時にルートの位置に
.maintenance
というファイルを設置します。

このファイルは自動アップデートの終了時に自動的に削除されるんですが、先述のように自動アップデート自体が途中で終了してしまうと、このファイルが残ったままなにもできなくなります。
そんなときは、このファイルを手動で削除してから、全体を最新ファイルで上書きすればOKです。

VOSTRO 200 のHDD増設

In: Hardware

22 12月 2009

DellのVOSTROシリーズはハードディスクが増設できる。
以下、VOSTRO 200の増設方法。

  1. 既設のHDを外す。
    ロックレバーを引いて、HDを上に、その後手前にずらすと外れる。
    ※ 下段のねじ位置に切り欠きがあるのでそれに沿って移動する。
  2. ねじの取り付け
    既設HDを参考に同じねじ位置にねじを取り付ける。
    既設のものは、ねじ頭が四角い特殊なものだが、すこし浮かせてねじをとりつければ問題なし。
  3. SATAケーブルの取り付け
    HDを取り付けてしまうとSATAケーブルが接続しにくくなるので、先
    に取り付けておく。
  4. 追加HDの取り付け
    1の手順の要領で、HDを取り付ける
  5. 既設HDの再取り付け
  6. 電源ケーブルの取り付け
  7. SATAケーブルをマザーボードに接続
  8. F2キーを押しながらPCの電源を入れ、BIOS画面を呼び出す。
  9. 追加したハードディスクがBIOSレベルで認識できているか確認
  10. Windowsを起動
  11. 基本的には自動的にインストールされるはず。デバイスマネージャー(コントロールパネル->システムとメンテナンス内)のディスクドライブにHDが追加されているか確認。
  12. このままでは、フォーマットされておらず未定義領域となっているはずなので、コントロールパネル->システムとメンテナンス、管理ツール項目にあるハードディスク パーティションの作成とフォーマット」を選択し、追加したHDを右クリックのメニューからフォーマットを実行する。

(Oさんありがとうございます)

About this blog

ここは、SE見習いである私ことdaceloが、日夜習得していくシステム関連の備忘録、phpやWordPressTipsのネタ、あるいはSEOやWebマーケティング関連の雑感を投稿するブログです。 平日は大体毎日投稿しています。土日は休業日です。

紹介

カウンター

昨日:951 今日:507 合計;273611

カレンダー

2010年8月
« 7月    
 1
2345678
9101112131415
16171819202122
23242526272829
3031  

Translator

Japanese flagEnglish flagIndonesian flag
By N2H