2009年06月24日


MSXML2.XMLHTTPでファイルをアップロードする

呼び出し側は WSH としての VBScript です。
バイナリとしてアップロードするので、CRLF は CRLF のままなので、
LF へ変換が必要なファイルやシステムでは、サーバー側で変換する必要があります

PHP ならそのままで問題無いので、わざわざ 通常の POST 仕様にあわせる
必要も無いと思います。

そもそも、サンプルは Microsoft の サポートオンラインにあるので、
IIS ではうまくいくのかとは思うのですが、数年前に Flex から同様
の処理を行うと、IIS が固まった記憶があります。

どうせ Apache サーバ で実装するのであまり深追いしませんでした。
いずれにしても、IIS に対して行う場合はテストが必要です

VBSCript 側
' XMLHTTP を作成
Set objHTTP = CreateObject("MSXML2.XMLHTTP")
' Stream オブジェクト の作成
Set Stream = CreateObject("ADODB.Stream")
' Stream のオープン
Stream.Open
' Stream タイプの指定
Stream.Type = 1		' StreamTypeEnum の adTypeBinary
' 既存ファイルの内容を Stream に読み込む
Stream.LoadFromFile "target.txt"

Call objHTTP.Open("POST","http://winofsql.jp/php/webdesktop/upload.php",False)
Call objHTTP.SetRequestHeader("Content-Length",Stream.Size)
Call objHTTP.Send(Stream.Read(Stream.Size))
Wscript.Echo objHTTP.responseText
 
' Stream を閉じる
Stream.Close


PHP側
<?
header( "Content-Type: text/html; Charset=shift_jis" );

$fp = fopen( "php://input", "rb" );
$wfp = fopen( "upload.dat", "wb" );

while( $ret = fread( $fp, 4096 ) ) {

	fwrite( $wfp, $ret );

}

fclose($wfp);
fclose($fp);


?>
データが保存されました

PHP を SHIFT_JIS で書いているので、http ヘッダに同じように
設定しておかないと、XMLHTTP が日本語の変換をできないので注意して下さい。
通常通り、使用しているキャラクタセットと http ヘッダを一致
させればどのキャラクタセットでも問題ありません。

但し、HTML 等の静的ページでは、サーバ側でキャラクタセツトの設定
ができない場合は、UTF-8 扱いになってしまいます


■ 関連する記事
PHP + VBS 分割ダウンロード
バッチ処理的ファイルのコピー
MSXML2.XMLHTTPでファイルをPOSTする
prototype.js の Ajax.Request を使い、FORM を使わずにデータをPOSTする

posted by at 2009-06-24 13:12 | Comment(0) | クライアント/サーバー | このブログの読者になる | 更新情報をチェックする

2009年06月15日


DIRECTORY_SEPARATOR等 : OSによって内容が変化する定数

一般的にWEBと言えば、unix でしようが、Windows サーバーも無い
わけではありませんし、業務的に言えば社内サーバーは Microsoft で
ある事は十分考えられますし、どちらでも稼動できるようにしておくのは、
やはり職人としては必要な事ではあります。
( 商品じゃ無い急いでるやっつけ仕事の場合は面倒なのでしませんが )

最も使う可能性の高そうなのは、PATH_SEPARATOR を使って set_include_path
を実行する事かもしれません。

以前、コードでこんなふうに書いた事もありました
$sep = substr( strtoupper( php_uname("s") ), 0, 7 ) == 'WINDOWS' ? ";" : ":";
set_include_path( ".$sep../pear/zip" );


unixwindows
DIRECTORY_SEPARATOR /\
PHP_SHLIB_SUFFIX sodll
PATH_SEPARATOR :;
(コロン)セミコロン
■ 関連する PHP ドキュメント
php_uname
set_include_path


posted by at 2009-06-15 00:08 | Comment(0) | PHP | このブログの読者になる | 更新情報をチェックする
Seesaa の各ページの表示について
Seesaa の 記事がたまに全く表示されない場合があります。その場合は、設定> 詳細設定> ブログ設定 で 最新の情報に更新の『実行ボタン』で記事やアーカイブが最新にビルドされます。

Seesaa のページで、アーカイブとタグページは要注意です。タグページはコンテンツが全く無い状態になりますし、アーカイブページも歯抜けページはコンテンツが存在しないのにページが表示されてしまいます。

また、カテゴリページもそういう意味では完全ではありません。『カテゴリID-番号』というフォーマットで表示されるページですが、実際存在するより大きな番号でも表示されてしまいます。

※ インデックスページのみ、実際の記事数を超えたページを指定しても最後のページが表示されるようです

対処としては、このようなヘルプ的な情報を固定でページの最後に表示するようにするといいでしょう。具体的には、メインの記事コンテンツの下に『自由形式』を追加し、アーカイブとカテゴリページでのみ表示するように設定し、コンテンツを用意するといいと思います。


※ エキスパートモードで表示しています

アーカイブとカテゴリページはこのように簡単に設定できますが、タグページは HTML 設定を直接変更して、以下の『タグページでのみ表示される内容』の記述方法で設定する必要があります

<% if:page_name eq 'archive' -%>
アーカイブページでのみ表示される内容
<% /if %>

<% if:page_name eq 'category' -%>
カテゴリページでのみ表示される内容
<% /if %>

<% if:page_name eq 'tag' -%>
タグページでのみ表示される内容
<% /if %>
この記述は、以下の場所で使用します