IEからのファイルアップロードができない

特定の人だけ、IEからファイルアップロードが出来ない。

今回の場合、原因はIEでjpegファイルは、MIME-Typeが”image/pjpeg”として扱われるためだった。

jpegしかアップできないように制限していたところをpjpegも通るようにした。
($_FILES[“photo”][“type”] == “image/jpeg” or $_FILES[“photo”][“type”] == “image/pjpeg”)

“IEからのファイルアップロードができない” の続きを読む

postgreSQLからmysqlへの移行で気を付けたい点

postgreSQLからmysqlへの移行で気を付けたい点

postgresqlで、ある小さなシステムを構築準備してました。
現状あるシステムをそちらに載せ変えるという事で、
既存のデータをそのまま使いたい。

最初に確認しておけばすんだ事だけど、postgresのDBエンコードがEUCで、
変更できない事がデータの移行テストの段階でわかった。
新規DB作成も許可されていなかった。

元のシステムがUTF8なので、機種依存丸付き文字がばんばん使われている。
それをそのまま使えるようにしたいし、新しい入れ物はUTF8でないといけない。

mysqlなら新規DBも作成できるし、そもそもUTF8だったので、
急遽つくりかえることにした。

その際、種々の問題が発生したので覚え書きを残しておく。

■データ型
timestump型はdatetime型にする。
(複数カラムあるため)

■php
関数名を「pg_」から「mysql_」に置換

mysql_fetch_objectは行番号指定で取得できないので、
mysql_data_seekでポインタ位置を指定する。

■福問い合わせ
サブクエリがまず展開されるので、サブクエリに無用な結果が含まれると
総当たりとなり、膨大になる。(反応遅い)
サブクエリのSELECT文はできるだけ条件を入れた方が良い。

UPDATE a_table,(SELECT * FROM b_table)o_table SET a_table.name=o_table.oldname where a_table.code=o_table.code and o_table.num=1;

UPDATE a_table,(SELECT * FROM b_table where num=1)o_table SET a_table.name=o_table.oldname where a_table.code=o_table.code;

■mysqlでは正規表現による置換が出来ない
これは面倒だったし、今回はpostgresに持ってって処理した。
ある特定の文字に挟まれた数値データをとりだしたかっただけなので、
それでいけたけれど、文字コードに影響される様な文字列だったらそれはできないし、
ステップ踏むしかないかな。
phpでREGEXPとREPLACEを使って置換する方法をとるとか。

以上、私のメモ書き。
素人なので表現や方法が間違ってるかもしれません。

昔は丸付き文字なんか、利用者の方に制限させて、
文字化けしたら利用者のせいにするとか普通だったけど、
今は丸付き文字も機種依存文字も使うもんね。
私は今も使わないけど。
“postgreSQLからmysqlへの移行で気を付けたい点” の続きを読む

php セーフモードでディレクトリ作成ファイルアップロード

phpのセーフモードではmkdirでディレクトリを作成するとオーナーがapacheとなり、
その作成したディレクトリにファイルを書き込む事ができないという制限にぶつかり、はまりました。

どうしても動的にディレクトリを作成し、その中にファイルを書き込みたい。

cgiではchownできるため、ディレクトリ作成部分だけcgiで書いて呼びだすという方法で逃げました。

なんだか。。と思うけど他に良い方法は無さそうです。
あったらメールください…。
“php セーフモードでディレクトリ作成ファイルアップロード” の続きを読む

X-Authentication-Warning

受注確認メールや問い合わせ確認メールを自動送信する際、phpよりmail関数を使用して送信すると、X-Authentication-Warningフィールドが自動で付加されてしまい、 メールサービスによっては届かない事がある(らしい)。
迷惑メールとみなされるのかな。

そこで、
/etc/mail/submit.cfの Trusted usersにTapacheを追加。
submit.cfを保存し、
make submit.cfを実行して、sendmailを再起動。

X-Authentication-Warningがつかなくなりました。

“X-Authentication-Warning” の続きを読む

mysql サーバ移転 テーブルデータ書き出し

テーブル構造は取得できたので、内用をcsvファイルに書き出す。

// 定義
$dir = ‘/backup/’
$mcsv = ‘table’;
$my_table = ‘my_table’;
// $my_tableテーブルを呼び出す
$rs = mysql_query(“SELECT * FROM “.$my_table);
// $my_tableテーブルのフィールド数
$fields = mysql_num_fields($rs);
if(!$fields) return;
// ループ処理
while($row = mysql_fetch_array($rs)) {
for($j=0; $j< $fields; $j++) {
// $dataにデータを蓄積
$data .= ‘”‘.addslashes($row[$j]).'”‘;
if($j< $fields-1) $data .= ',';
}
$data .= “\n”;
}
// $dataから余計な文字列を取り除く
$a = substr($data, 0, 5);
if($a == ‘Array’) $data = strstr($data, ‘Array’);
// CSVファイルを呼び出す(※なければ新たに作成)
$fp = @fopen($dir.$mcsv.”.csv”, “a”);
// CSVファイルに$dataを追加挿入
@fputs($fp, $data);
// CSVファイルを閉じる
@fclose($fp);

うまく書き出せた。件数は多くなかった。
機種依存文字がある...。

次は新サーバでの設定。
“mysql サーバ移転 テーブルデータ書き出し” の続きを読む

mysql サーバ移転 テーブルコピー

ターミナルからdumpが使えない場合の引っ越し手順覚え書き。

今回の移転作業は、移転もとの DBが業者の専用の物であり、他のクライアントと共用であると推測されるため、このような手順をとる。

MySQLDump 2.0というクラスをダウンロードし、phpファイルから実行するとdumpファイルを出力するというもの。

でも、なぜかこれができなかったので、手動で情報を取得する。

まずテーブルのリストを取得。

$dbname = ‘mysql_dbname’;

if (!mysql_connect(‘mysql_host’, ‘mysql_user’, ‘mysql_password’)) {
echo ‘Could not connect to mysql’;
exit;
}

$sql = “SHOW TABLES FROM $dbname”;
$result = mysql_query($sql);

if (!$result) {
echo “DB Error, could not list tables\n”;
echo ‘MySQL Error: ‘ . mysql_error();
exit;
}

while ($row = mysql_fetch_row($result)) {
echo “Table: {$row[0]}\n”;
}

mysql_free_result($result);

幸いにも2個しかテーブルが無いようだ。

テーブルの構造を取得

$result = mysql_query(“SHOW COLUMNS FROM sometable”);
if (!$result) {
echo ‘Could not run query: ‘ . mysql_error();
exit;
}
if (mysql_num_rows($result) > 0) {
while ($row = mysql_fetch_assoc($result)) {
print_r($row);
}
}

後はselect分でcsvを吐き出して、それを取り込むか。続きは明日。
“mysql サーバ移転 テーブルコピー” の続きを読む

警告 : ページの有効期限切れ

history.back() や ブラウザの戻るボタンで前のページへ戻ろうとすると、

警告 : ページの有効期限切れ

と出ることがあります。

前に閲覧していたページがフォームデータの送信によって作られたページの場合によくおこる様です。(検索結果、お問い合わせフォームなど)

今回の場合、再読み込みを強制させることで何とかなった様です。
session_cache_limiter(‘private, must-revalidate’);
“警告 : ページの有効期限切れ” の続きを読む

年間カレンダー

営業日のお知らせのため、テーブルでカレンダーを作る事がよくありますが、毎回手打ちして作るのはナンセンスだと思い、カレンダー出力のphpを作りました。

とりあえず、表示するだけのものです。
これに独自の休日や日本の祝日等を入れられる様にしたら便利ですね。
今後の課題です。

“年間カレンダー” の続きを読む