カテゴリ: PHP
投稿者: mio
Twitterのタイムラインの取得など、
出来る限り細かい間隔で cronを実行したい時の cronの設定方法ですが。


*/1分  *時  *日  *月  *曜日


とすると良いようです。


*/2 だと、2分おき、
*/10 だと、 10分おき、


といった感じです。

heteml で動作確認をしました。
おそらく、他のサーバでも、これでいけると思います。
カテゴリ: PHP
投稿者: terada
表題のように、CORESERVER(もしくはXREA)でPEARのOAuthライブラリを使えるようにするまでの手順をメモしておきます。

1)CORESERVERの管理画面で ホスト情報登録>SSH登録
2)PuTTYなどでホスト名を入力してSSH接続
3)コマンドラインでログイン名とパスワードを入力してログイン
4)public_html直下にPEARをインストール(情報元
pear config-create /virtual/自分のユーザ名/public_html .pearrc

pear install -o PEAR

5)必要なPEARパッケージをインストールしてパスを通す(情報元
pear install Net_URL2-0.3.0

pear install HTTP_Request2-0.5.1

pear install HTTP_OAuth-0.1.6

PEARを使うディレクトリに以下のように記述した.htaccessを置いておくことで、いちいち相対パスで辿らなくて良くなる。
php_value include_path ".:/usr/local/lib/php:/virtual/自分のユーザ名/public_html/pear/php"

※赤字の部分はphpinfo();で「include_path」を確認しそれと合わせればよい
カテゴリ: PHP
投稿者: terada
.htaccessを作成するツールは、こことか便利なものがありますが、.htpasswdへの物理パスを調べなければならないのがちょっと面倒くさいので、もっと簡単になるようにPHPで作ってみました。

htaccess.zip[601clicks]
(phpのまま置いとくのが気持ち悪かったので圧縮してますが、単なるPHPファイルです)

<使い方>
1:「.htaccess」を置きたいディレクトリにこの「htaccess.php」を置く。
2:ブラウザでこのファイルにアクセスする
3:コピー&ペーストで「.htaccess」を作成

中身はこんな感じです。

<?php
$cwd = getcwd();
echo '<Files ~ "^.(htaccess|htpasswd)$"><br />';
echo 'deny from all<br />';
echo '</Files>';
echo 'AuthUserFile '.$cwd.'/.htpasswd<br />';
echo 'AuthGroupFile /dev/null<br />';
echo 'AuthName "Please enter your ID and password"<br />';
echo 'AuthType Basic<br />';
echo 'require valid-user<br />';
echo 'order deny,allow<br />';
?>
カテゴリ: PHP
投稿者: mio
PHPと、SSIは共存できないようなので、PHP上で、SSIの記述が動くような関数を作りました。以下、テンプレートとなるhtmlの記述の中で、
<!--#include virtual="/ssi/header.html" -->
といった部分を、そのファイルの中身のHTMLに置き換えてくれる関数です。
正規表現を使って実装してます。
ファイルのパスは、DOCUMENT_ROOTからの絶対パスとしています。

function ssi_tmp_engine($html)
{
//SSIの vertial の読み込みを、 PHPで実装
while( ereg("<!--#include virtual=\"([[:alnum:]_/\.]+)\" -->",$html, $matches) )
{
$fileName = $matches[1];
$templateHTML = file_get_contents( $_SERVER['DOCUMENT_ROOT'].$fileName ) or die("SSI ENGINE : ファイルが読み込めません\n");
$html = str_replace($matches[0],$templateHTML,$html);
}
return $html;
}
カテゴリ: PHP
投稿者: mio
自分で調べたわけでも何でもないのですが、情報ソースが全然なかったので、備忘録としてリンクを貼らせていただきます。yossyさん、ありがとうございます。

PHP5でfgetcsvが正常に動作しない

この、fgetcsv_reg()
という関数はとてfgetcsvと同じように使えるので、
プログラムもほとんどそのままで使いまわせてとても便利です。
カテゴリ: PHP
投稿者: mio
以下、メモです。
今後、項目数は増減するかもしれません。


・場合によっては入力文字数の制限をかけた方が良い

テスト方法:
500文字ぐらいのテキストを入力してみる


SQLインジェクション
$str = str_replace( "'", "''", $str );
とするなど、'をエスケープする。

テスト方法:
' OR 't' = 't
と入力してみる。


・MySQLで、LIKE '%HOGE%'のとき検索語に、%や_が含まれる場合
$str = str_replace( "%", "\%", $str );
$str = str_replace( "_", "\_", $str );
とするなど、エスケープする。

テスト方法:
%
と入力してみる。

・"を入力

・"'"'"'"'"などと入力

・\\\\\\\\\\などを入力

・______________などを入力

・半角スペースの連打

・全角スペースの連打
カテゴリ: PHP
投稿者: mio
前から、PHPを書くときに毎回PHPのリファレンス系の本を調べるのが面倒だと思っていたのですが、PHPグループがマニュアル出していたことを思い出して、早速ダウンロードしました。(今更ですが。。)

ダウンロードできるPHPマニュアルは、html版と、chm版があって、 chm版はウィンドウズのヘルプファイルのフォーマットのもので、これが非常に便利。検索が高速できるのです。いちいち、本の索引とかみないでいいのが感動的です。コンピューターってすごいですね。(今更ですが。。)

問題なのは、日本語訳がヘボいってところ。
翻訳ソフトで一括で翻訳されているだけな気がします。
ですので、英語できる方は英語のマニュアル見たほうが良いかも。
これを期に英語勉強するかな?

PHPマニュアルのダウンロードページ
↑英語のページですが、日本語マニュアルもダウンロードできます。
カテゴリ: PHP
投稿者: mio
コイツは超優秀です。
前からサーバの移行の際に、膨れ上がったデータベース(MySQL)の簡単な移行方法がないものか探していたのですが、ついに発見しました。なんと、phpMyAdminのエラー画面にリンクがありました(笑)

BigDump です。

これで、40MBのsqlファイル(22万行)を一発でインポートできました。
phpMyAdminだと、デフォルトの設定で40MBのファイルをアップするのは途中でタイムアウトしちゃって無理ですし、phpMyAdmin/config.inc.phpの設定をいじってインポートする方法もあるみたいですが、共用サーバだとphpMyAdminの設定がいじれなかったりする場合もあるでしょうし、config.inc.phpの設定いじるのって面倒だったりもします。(初心者はそわそわするし)

このBigDumpは、PHPのプログラムなんですが、データベースに接続するユーザ名や、パスワードなど、データベースに接続する際に必ず必要となる基本的な情報だけ書いて、あとはこのphpプログラムと同じ階層に.sqlファイルとか.gzファイル(圧縮した場合)をFTPソフトとかで置いて、bigdump.phpからそのファイルを実行するだけでOK。しかもこのPHPファイルは1つのファイル(24Kb)で完結してるので扱いが非常に楽。

そして、phpMyAdminに比べて圧倒的に良いのは、インポート中にプログレスバーのようなものが現れて何パーセント書き込んだかが表示されるってところです。この機能のおかけでかなり安心して作業できました。
(javascriptは有効にしましょう)

いやー、感動しました。
BigDump
詳しい使い方はがんばって英語の説明読んでください。

phpMyAdmin/config.inc.phpの設定をいじってインポートする方法2
カテゴリ: PHP
投稿者: mio
あれ、できたっけ?と思ってやってみると、そのままオブジェクトを突っ込んでもダメで、色々調べたらある関数を使うとできることがわかりました。

serialize()と、unserialize()を使えばOKみたいです。

使い方は、保存するときに、

require_once "Object.php"; //ここでは別ファイルに定義したクラスが書かれているとする。
$obj = new Object(); // Objectは、自分で定義したクラス
$sdata = serialize( $obj ); //シリアライズする。
$_SESSION["OBJ"] = $sdata; //セッションに保存。

とします。

で、他のページに移ったときに、
Objectクラスをちゃんと読み込んでから、元に戻します。

require_once "Object.php";//ちゃんとクラスの定義を読み込む
$sdata = $_SESSION["OBJ"];
$obj = unserialize( $sdata );

これは便利ですね。

詳しくはこちら。
http://php.plus-server.net/language.oop.serialization.html
カテゴリ: PHP
投稿者: mio
PHPやCGIが動いているウェブサイトで、このエラーが起きたときの対処法ですが、Telnetで動いているプロセスをチェックして、サーバに高い負荷を与えているプロセスを強制終了すると良いということが分かりました。

Telnetで、

ps -ux

と打って、出てきた処理の中でCPU負荷の高いものを強制終了させる。

kill 番号1 番号2 番号3

これでOK。


詳しくはサクラインターネットのページをご覧ください。
http://support.sakura.ad.jp/support/web/manual/trouble/web503.html
http://support.sakura.ad.jp/support/web/manual/tech/telnet/telnet04.html