Category Archives: さくらインターネット

さくらサーバでPHPを使って空メール受信

さくらサーバでPHPを使って空メール受信とかの設定のメモ|PHPメモ

参考にしまっすメモ。

phpのzlibモジュールでコンテンツを圧縮

さくらレンタルサーバはmod_deflateモジュールが入ってないので、PHP側でgzipしてうんぬん~というのをやっていたんだけど、これでよかったのだった。

PHPでコンテンツをgzip圧縮する方法 zlib編

gzip でコンテンツを圧縮することにより、ネットワークの負荷を
軽減させることができ、レスポンススピードの向上が期待できます。

しかしながら、mod_deflateが利用できない場合もあります。phpの拡張 zlib を利用することでコンテンツの圧縮をすることが可能になります。
ob_startとgzhandlerを使うのと異なり、ソースコードの変更は必要ありません。

さくらなどのレンタルサーバを借りている場合に有効な手段になります。

PHPの設定ファイル php.iniに下記設定を追加します。
/usr/local/etc/php/your-php.ini

zlib.output_compression=1

さくらのレンタルサーバの場合、$HOME/www/php.ini に書きます。

うーむ。簡単。
今だとさくらコンパネからphp.iniを修正できるので、そちらで書いても良いですね。

Zend Frameworkで多対多のテーブルをMyISAMなどリレーション無しで扱う場合

Zend Frameworkで多対多のテーブルをリレーション無しで扱う。:: PHPの種 ブログ

つまり強制MyISAMのさくらレンサバでは。。
$_dependentTablesを指定しましょう。

で、ある程度Zend_Db_Tableで保管ができるので、それを利用させてもらいましょう。

[php]
class BugsProducts extends Zend_Db_Table_Abstract
{
protected $_name = ‘BugsProducts’;
protected $_referenceMap = array(
‘Bug’ => array(
‘columns’ => ‘bug_id’,
‘refTableClass’ => ‘Bugs’,
‘refColumns’ => ‘id’,
‘onDelete’ => self::CASCADE,
‘onUpdate’ => self::CASCADE
),
‘Product’ => array(
‘columns’ => ‘product_id’,
‘refTableClass’ => ‘Products’,
‘refColumns’ => ‘id’,
‘onDelete’ => self::CASCADE,
‘onUpdate’ => self::CASCADE
)
);
}
[/php]

んで、リファレンスを貼られたほうのテーブルで

[php]
class Products extends Zend_Db_Table_Abstract
{
protected $_name = ‘products’;
protected $_dependentTables = array(‘BugsProducts’);
}
[/php]

DependetTablesをクラス名で指定しておきます。

これでDeleteがCascadeされたりなど、Zend_Db_Table側でリレーションを保管してくれます。
そもそもInnoDBが使えればいいんですけどねえ。。

Zend Frameworkで多対多のテーブルをリレーション無しで扱う。:

Zend Frameworkで多対多のテーブルを簡単に扱う。: PHPの種 ブログ

RDBMS上でリレーションを組んでおけば、Zend_Db_Tableの設定で 親側のテーブルに $_dependentTables を指定しなくてもよいので楽です。

つまり強制MyISAMのさくらレンサバでは。。
$_dependentTablesを指定しましょう。

さくらのレンタルサーバはmagic_quotes_gpcがオンです

さくらレンタルサーバで久々にPHPを組んでたら、やられました。
magic_quotes_gpcがデフォルトでオンでした。

というわけで、~/www/php.iniを直接編集するか、さくらインターネットサーバコントロールパネルからPHP設定の編集で

magic_quotes_gpc = off

としてやりましょう。
magic_quotes_gpcはphp6では廃止されるというのに。

さくらインターネットMySQLを自動バックアップして『暗号化』してgmailに送る

さくらインターネットMySQLを自動バックアップしてgmailに送る: PHPの種 ブログで運用していたところ、記事にこんなコメントが。

ネットワーク越しにバックアップするとなると、何らかの暗号化をした方が望ましいと思いますが、何か良い方法はないものでしょうか。

確かに言われてみればそうですね。MySQLにブログデータしか入ってなかったので、セキュアな考えが抜け落ちてました。ありがとうございます。

さくらのレン鯖にはgpg2が入っているので、それを活用させてもらいましょう!

/usr/local/bin/mysqldump –opt -c -h [MySQL SERVER] -u [USERNAME] –password=[PASSWORD] [DB NAME] | /usr/local/bin/gpg -c –cipher-algo AES256 –batch –passphrase “[PASSPHRESE]” | /usr/local/bin/php ~/mailto.php -m [MAILADDRESS]

AES256で暗号化してから送るコマンドに変更です。gpgのデフォルトで出力結果が圧縮されるので、前回付けていたgzipはいらないでしょう。

復号も色々オプションを付けられますが、一番簡単なのは

$ gpg [filename]

です。

暗号化したら一応復号できるかどうかのチェックしておいてくださいね。

ちなみに共有鯖の悲哀か

Warning: using insecure memory!

と警告が出ることは避けられそうにないので、cronに登録する時は、

1> /dev/null

を追記しておくのが好ましいでしょうね。

さくらインターネットMySQLを自動バックアップしてgmailに送る

さくらインターネットで MySQL のバージョンを 4 から 5 に移行: PHPの種 ブログ
↑なんて感じでさくらインターネットでのMySQLを5に変えたのですが、これでmysqldumpが(文字コード的に)安定したということで、前諦めた自動バックアップを設定しておこうと思いました。

mysqldumpしてメールで送るうんぬんは今までも色んなところでやられていると思いますが、今回困った点としては

  • uuencodeの添付ファイルだとgmailでうまく扱えない

です。


~ | uuencode attached.file | mail -s attached.file hoge@gmail.com

なんてお手軽にしたかったんですが、どうもダメみたい。

で、普通に添付メールとして送れるコマンドを探していたらmuttやらemailやらあるものの、どうにもさくらインターネットのレン鯖に素直に入れられそうになかったので、phpでさくっと作ってみました。とりあえずZend Frameworkで。

このぐらいはワンライナーで作れそうですが、敢えて?のZend Frameworkで。Pear_Mailとかもきっとあるに違いないけど全く調べて無いです。きっとある。

[php]
getOption(‘m’)) {
echo(‘How to : mailto.php -m [mailaddress]’);exit;
}

$mail = new Zend_Mail();
$mail->setBodyText(‘This is the text of the mail.’);
$mail->setFrom(‘somebody@example.com’, ‘Some Sender’);
$mail->addTo($address, ‘Some Recipient’);
$mail->setSubject(‘MYSQL DUMP’);
$mail->createAttachment(file_get_contents(“php://stdin”));
$mail->send();
[/php]

何も考えずにモジュールを持ってくるだけで簡単に作れますね。

Zend_Mail部分はZend Frameworkマニュアルそのまんまなので、本文や差出人とか、自由に変更してくださいね。添付ファイルに名前をつけたい場合は、マニュアルを参考に。

このスクリプトに標準入力からdumpを流し込みます。
スクリプトはmailto.phpと名付けてホームディレクトリに保存しました。

/usr/local/bin/mysqldump --opt -c -h [MySQL SERVER] -u [USERNAME] --password=[PASSWORD] [DB NAME] | gzip | /usr/local/bin/php ~/mailto.php -m [MAILADDRESS]

無事dumpしたgzファイルが添付されましたでしょうか。

上のコマンドが無事成功したなら、さくらコンパネからcronで登録しておきましょう!

ちなみに私はgmail宛に送信して、すぐにゴミ箱に行くようにフィルタリングしています。これなら30日は保存されますし、gmailの容量も食わないですしね。

さくらインターネットで MySQL のバージョンを 4 から 5 に移行

さくらインターネットで MySQL のバージョンを 4 から 5 に移行 – 転校生@Hatena

もう、まんま↑で私もMySQL4からMySQL5に移行しました。元々のデータがUTF-8で、mysqldump4をした際に出力されたSQLのエンコードがかな~り怪しかったですが、特に問題なくインポートできましたヨ。(たぶん)
かなりドキドキしましたが(^-^;

さくらレンタルサーバでPHPのメール受信&解析

メール解析@PHPその5 – makotoworldのはてなダイアリー

さくらレンタルサーバでのメールをPHPに渡して・解析・返信をされています。さくら固有の設定方法がっ
「.forward」ではなく「.mailfilter」に書く、「.mailfilter」のパーミッションを600にする、と。めもめも。

さくら鯖はデフォルト設定だとPATH_INFO使えないらしい

さくら鯖はデフォルト設定だとPATH_INFO使えないのか – またたび.ws

ほほー。さくらでPHPを使うときはいつもPHP5をインストールして使っているので気づかなかったですね。素のPHPだとそうなんですね。