WinSCP で UTF-8 のファイル名が文字化けしてしまった。
普段 Linux で日本語のファイル名を扱うようなことはないのですが、簡単にニックネームとファイル名を一致させたくて手抜きをしました^^;
WinSCP で保存ディレクトリーを見ると見事に文字化けしている…
早速ググって見ると設定の SFTP になにやらあるらしいことが書いてあるのですが、私の使っているバージョン (4.1.9) には無い><;
速攻でバージョンアップ(4.2.5)して見るが変わらず…
で、設定を見てみると「環境」のところに「ファイル名をUTF-8でエンコード」というのが「自動」になっている。で、これを「オン」にしてみたところちゃんと表示できた\(^o^)/
2010年1月13日水曜日
2010年1月8日金曜日
PHP: session.use_trans_sid = 1 のバグ
携帯用サイトで session.use_trans_sid = 1 にしてセッションIDを URL に付けるようにしたのですがたまにリンクがおかしくなる現象に遭遇しました。
具体的には、<a href="abc.php?SID=xxxxxx"> となるべきところが <a href="abc.php"?SID=xxxxxx> とセッションIDが終端の " の後ろに付いてしまうというものです。
そこで下記のプログラムを走らせてみたところ見事に再現したので、まぁ PHP のバグだろうなぁと思っております。
■ソース
<?php
ini_set( 'session.use_cookies', '0' );
ini_set( 'session.use_trans_sid', '1' );
ini_set( 'session.use_only_cookies', '0');
session_start( );
for ( $i = 0; $i < 1000; ++ $i )
{
?>
<a href="test.php?test=<?php echo $i; ?>"><?php echo $i; ?></a><br />
<?php
}
?>
■結果
<a href="test.php?test=0&SSID=edttcli7iqip5vnsqu8a0mgvl4">0</a><br />
<a href="test.php?test=1&SSID=edttcli7iqip5vnsqu8a0mgvl4">1</a><br />
中略
<a href="test.php?test=99&SSID=edttcli7iqip5vnsqu8a0mgvl4">99</a><br />
<a href="test.php?test=100"?SSID=edttcli7iqip5vnsqu8a0mgvl4>100</a><br />
どうも、タグの中で <?php ?> を使った場合に発生する現象のように思えたので下記のように書き換えてやったところ、問題が発生しなくなりました。
■ソース
<?php
ini_set( 'session.use_cookies', '0' );
ini_set( 'session.use_trans_sid', '1' );
ini_set( 'session.use_only_cookies', '0');
session_start( );
for ( $i = 0; $i < 1000; ++ $i )
{
$s = '<a href="test.php?test="' . $i . '">';
?>
<?php echo $s; ?>"><?php echo $i; ?></a><br />
<?php
}
?>
具体的には、<a href="abc.php?SID=xxxxxx"> となるべきところが <a href="abc.php"?SID=xxxxxx> とセッションIDが終端の " の後ろに付いてしまうというものです。
そこで下記のプログラムを走らせてみたところ見事に再現したので、まぁ PHP のバグだろうなぁと思っております。
■ソース
<?php
ini_set( 'session.use_cookies', '0' );
ini_set( 'session.use_trans_sid', '1' );
ini_set( 'session.use_only_cookies', '0');
session_start( );
for ( $i = 0; $i < 1000; ++ $i )
{
?>
<a href="test.php?test=<?php echo $i; ?>"><?php echo $i; ?></a><br />
<?php
}
?>
■結果
<a href="test.php?test=0&SSID=edttcli7iqip5vnsqu8a0mgvl4">0</a><br />
<a href="test.php?test=1&SSID=edttcli7iqip5vnsqu8a0mgvl4">1</a><br />
中略
<a href="test.php?test=99&SSID=edttcli7iqip5vnsqu8a0mgvl4">99</a><br />
<a href="test.php?test=100"?SSID=edttcli7iqip5vnsqu8a0mgvl4>100</a><br />
どうも、タグの中で <?php ?> を使った場合に発生する現象のように思えたので下記のように書き換えてやったところ、問題が発生しなくなりました。
■ソース
<?php
ini_set( 'session.use_cookies', '0' );
ini_set( 'session.use_trans_sid', '1' );
ini_set( 'session.use_only_cookies', '0');
session_start( );
for ( $i = 0; $i < 1000; ++ $i )
{
$s = '<a href="test.php?test="' . $i . '">';
?>
<?php echo $s; ?>"><?php echo $i; ?></a><br />
<?php
}
?>
2009年6月25日木曜日
Visual Studio 2008 が固まる
保守派の私は Visual Studio 2003 を使っていたのですが、さすがに古くてまずかなぁと思い Visual Studio 2008 を入れてみました。
とりあえず新規作成で HTML ファイルを作成、「デザイン」ボタンを押してソース表示からデザイン表示に切り換えようとしたら固まった><;
ウムム…即ググって見たけど同じ症状で困って質問している人はいたけどレスはついていない><;
予感としては IE7 を入れていないせいなのかもしれない…
とりあえず新規作成で HTML ファイルを作成、「デザイン」ボタンを押してソース表示からデザイン表示に切り換えようとしたら固まった><;
ウムム…即ググって見たけど同じ症状で困って質問している人はいたけどレスはついていない><;
予感としては IE7 を入れていないせいなのかもしれない…
2009年6月22日月曜日
Submissionポート(587)対応
お客様から、ご利用頂いているサーバーの SMTP に接続できなくなったと問い合わせが入りました。
telnet 出すら繋がらないとのことなので、早速試してみると特に問題なく繋がります。「う~ん、こりゃプロバイダーが Port 25 をブロックしたな!」と調べてみると案の定…
で、どうしたものかとひと思案… SSL/TSL を使えばいいんだけど XMail をバージョンアップすると docomo の RFC 違反に引っかかる><;かといって、拾ってきたパッチ宛バージョンを使うのもなんか不安…
ほんじゃ、ファイアウォールの NAT を使って Port 587 を Port 25 に変換するかとネットスクリーンの設定をいじりはじめたのですが、ちょっと気になってググって見ると、XMail 複数ポートに対応してるじゃないか!
1. XMailCFG を開く
2. 環境設定をクリック
3. XMailCFG環境設定をクリック
4. SMTP ポート(変更注意!!)に「0.0.0.0:25 0.0.0.0:587」と入れる
5. 環境を保存をクリック
6. 完了
いやはや、SMTPポート変更機能が XMail環境ではなく XMailCFG環境設定にあるとは思いもしませんでした^^;
telnet 出すら繋がらないとのことなので、早速試してみると特に問題なく繋がります。「う~ん、こりゃプロバイダーが Port 25 をブロックしたな!」と調べてみると案の定…
で、どうしたものかとひと思案… SSL/TSL を使えばいいんだけど XMail をバージョンアップすると docomo の RFC 違反に引っかかる><;かといって、拾ってきたパッチ宛バージョンを使うのもなんか不安…
ほんじゃ、ファイアウォールの NAT を使って Port 587 を Port 25 に変換するかとネットスクリーンの設定をいじりはじめたのですが、ちょっと気になってググって見ると、XMail 複数ポートに対応してるじゃないか!
1. XMailCFG を開く
2. 環境設定をクリック
3. XMailCFG環境設定をクリック
4. SMTP ポート(変更注意!!)に「0.0.0.0:25 0.0.0.0:587」と入れる
5. 環境を保存をクリック
6. 完了
いやはや、SMTPポート変更機能が XMail環境ではなく XMailCFG環境設定にあるとは思いもしませんでした^^;
2009年5月15日金曜日
Oracleの文字列比較
Oracleの固定長文字列比較でちょっとはまったのでメモ書き。
通常、固定長の文字列(CHAR型やリテラル)を比較する場合には、長い方に長さを合わせて不足分にスペースを埋めてから比較します。
一方、左辺、右辺のどちらかが可変長の場合には補完は行わずにそのまま比較します。
CREATE TABLE HOGE ( C_CLASS CHAR(4) );
INSERT INTO HOGE(C_CLASS) VALUES ('PC');
SELECT * FROM HOGE C_CLASS = 'PC';
上記のSQLですがそのまま流すとちゃんとレコードを見つけてきます。ところが、これをプリペアードすると途端に見つけてくれなくなる!
最初は PDO のバグか?と思っていたのですがよくよく調べてみるとなんとOracleはプリぺーアドステートメントのパラメーターに与えたリテラルは固定長文字列(CHAR)ではなく可変長文字列(VARCHAR2)として扱うのだそうです@@
右辺が可変長になってしまったので補完が行われず = が偽を返してしまったわけです><;
まったく、Oracleってやつは…
通常、固定長の文字列(CHAR型やリテラル)を比較する場合には、長い方に長さを合わせて不足分にスペースを埋めてから比較します。
一方、左辺、右辺のどちらかが可変長の場合には補完は行わずにそのまま比較します。
CREATE TABLE HOGE ( C_CLASS CHAR(4) );
INSERT INTO HOGE(C_CLASS) VALUES ('PC');
SELECT * FROM HOGE C_CLASS = 'PC';
上記のSQLですがそのまま流すとちゃんとレコードを見つけてきます。ところが、これをプリペアードすると途端に見つけてくれなくなる!
最初は PDO のバグか?と思っていたのですがよくよく調べてみるとなんとOracleはプリぺーアドステートメントのパラメーターに与えたリテラルは固定長文字列(CHAR)ではなく可変長文字列(VARCHAR2)として扱うのだそうです@@
右辺が可変長になってしまったので補完が行われず = が偽を返してしまったわけです><;
まったく、Oracleってやつは…
2009年4月23日木曜日
UltimateDefrag
Norton Speed Disk はあまり使われていないファイルをHDDの内側に配置してくれたりしてかなりお気に入りのデフラグツールだったのですが、2003バージョンは古すぎて Vista では使えないらしいです><;
Norton System Works の最新版を購入しようかな?と思っていたのですがググっていたら UltimateDefrag というフリーソフトが見つかりました。ちょっと怪しげですが 日本語化パッチ もありました。
早速 Vista にて使ってみたのですが C: ドライブに対するデフラグは問題あるようでなんか変な名前のファイルを移動しようとしたところで延々とアクセスを繰り返します。一晩放置したところ処理は終わっていましたが半分くらいのファイルが元の位置に残ってしまっていました…
今朝、仕事に出る前にXPが入っているノートPC上で動かして来たのでどうなっているか楽しみです。
Norton System Works の最新版を購入しようかな?と思っていたのですがググっていたら UltimateDefrag というフリーソフトが見つかりました。ちょっと怪しげですが 日本語化パッチ もありました。
早速 Vista にて使ってみたのですが C: ドライブに対するデフラグは問題あるようでなんか変な名前のファイルを移動しようとしたところで延々とアクセスを繰り返します。一晩放置したところ処理は終わっていましたが半分くらいのファイルが元の位置に残ってしまっていました…
今朝、仕事に出る前にXPが入っているノートPC上で動かして来たのでどうなっているか楽しみです。
2009年4月18日土曜日
ステートメントといっても一気に処理できるわけではない
最近のプログラマーは高級言語から入るのでCPUがどういう手順で動いているのかわからないみたいです。
while ( fscanf( fp, "%d", &x[i ++]) != EOF );
このプログラムでは i には読み込んだ値数 +1 が格納されて終わりますが、この説明の際に 「i は fscanf が値を返した後にインクリメントされる」と主張する方が複数いました@@
fsanf( … ) を1つの処理としてとらえているんですね・・・でも、実際には引数を評価する処理は、順次行われてゆくわけなんですが、それを切り離して考えられないようです。
こういうプログラマーが下記のような構文に出合った時にどう解釈するのかが楽しみではあります。
while ( fscanf( fp, "%d %d", &x[i ++], &x[i ++] ) != EOF );
while ( fscanf( fp, "%d", &x[i ++]) != EOF );
このプログラムでは i には読み込んだ値数 +1 が格納されて終わりますが、この説明の際に 「i は fscanf が値を返した後にインクリメントされる」と主張する方が複数いました@@
fsanf( … ) を1つの処理としてとらえているんですね・・・でも、実際には引数を評価する処理は、順次行われてゆくわけなんですが、それを切り離して考えられないようです。
こういうプログラマーが下記のような構文に出合った時にどう解釈するのかが楽しみではあります。
while ( fscanf( fp, "%d %d", &x[i ++], &x[i ++] ) != EOF );
登録:
投稿 (Atom)