さくらサーバでPHPを使って空メール受信とかの設定のメモ|PHPメモ
参考にしまっすメモ。
さくらレンタルサーバはmod_deflateモジュールが入ってないので、PHP側でgzipしてうんぬん~というのをやっていたんだけど、これでよかったのだった。
gzip でコンテンツを圧縮することにより、ネットワークの負荷を
軽減させることができ、レスポンススピードの向上が期待できます。しかしながら、mod_deflateが利用できない場合もあります。phpの拡張 zlib を利用することでコンテンツの圧縮をすることが可能になります。
ob_startとgzhandlerを使うのと異なり、ソースコードの変更は必要ありません。さくらなどのレンタルサーバを借りている場合に有効な手段になります。
PHPの設定ファイル php.iniに下記設定を追加します。
/usr/local/etc/php/your-php.inizlib.output_compression=1
さくらのレンタルサーバの場合、$HOME/www/php.ini に書きます。
うーむ。簡単。
今だとさくらコンパネからphp.iniを修正できるので、そちらで書いても良いですね。
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で多対多のテーブルを簡単に扱う。: PHPの種 ブログ
RDBMS上でリレーションを組んでおけば、Zend_Db_Tableの設定で 親側のテーブルに $_dependentTables を指定しなくてもよいので楽です。
つまり強制MyISAMのさくらレンサバでは。。
$_dependentTablesを指定しましょう。
さくらインターネット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 のバージョンを 4 から 5 に移行: PHPの種 ブログ
↑なんて感じでさくらインターネットでのMySQLを5に変えたのですが、これでmysqldumpが(文字コード的に)安定したということで、前諦めた自動バックアップを設定しておこうと思いました。
mysqldumpしてメールで送るうんぬんは今までも色んなところでやられていると思いますが、今回困った点としては
です。
~ | uuencode attached.file | mail -s attached.file hoge@gmail.com
なんてお手軽にしたかったんですが、どうもダメみたい。
で、普通に添付メールとして送れるコマンドを探していたらmuttやらemailやらあるものの、どうにもさくらインターネットのレン鯖に素直に入れられそうになかったので、phpでさくっと作ってみました。とりあえずZend Frameworkで。
このぐらいはワンライナーで作れそうですが、敢えて?のZend Frameworkで。Pear_Mailとかもきっとあるに違いないけど全く調べて無いです。きっとある。
[php]
set_include_path(
get_include_path() .
PATH_SEPARATOR . '[PATH TO ZENDFRAMEWORK]'
);
require_once 'Zend/Loader/Autoloader.php';
$autoloader = Zend_Loader_Autoloader::getInstance();
$opts = new Zend_Console_Getopt('m:');
if (!$address = $opts->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 に移行 – 転校生@Hatena
もう、まんま↑で私もMySQL4からMySQL5に移行しました。元々のデータがUTF-8で、mysqldump4をした際に出力されたSQLのエンコードがかな~り怪しかったですが、特に問題なくインポートできましたヨ。(たぶん)
かなりドキドキしましたが(^-^;
メール解析@PHPその5 – makotoworldのはてなダイアリー
さくらレンタルサーバでのメールをPHPに渡して・解析・返信をされています。さくら固有の設定方法がっ
「.forward」ではなく「.mailfilter」に書く、「.mailfilter」のパーミッションを600にする、と。めもめも。
さくら鯖はデフォルト設定だとPATH_INFO使えないのか – またたび.ws
ほほー。さくらでPHPを使うときはいつもPHP5をインストールして使っているので気づかなかったですね。素のPHPだとそうなんですね。
最近のコメント