SQLの窓

2014年07月31日


PHP : cURL で FTP + SSL ダウンロード

サンプルは、PHP のオンラインマニュアルの投稿部分にあります。この、「投稿部分」には昔から結構重要な情報が掲載されています。特に、SSL についてはマニュアル本文に無いパラメータがあり、libcurl.a の Cドキュメントからの参照が記述されています。(実際、本文のパラメータだけは SSL にはなりませんでした)

以下は、コマンドプロンプトからの実行を想定していますので、実行は以下のようになります。
php.exe ftp_ssl_download.php

また、Windows では、php.ini で extension=php_curl.dll が必要です。実際、SSL が使われたかどうかの確認は、debug.txt を参照して確認できます。

ftp_ssl_download.php
<?php
// ************************************
// ユーザとパスワード
// ************************************
$username = 'ユーザ';
$password = 'パスワード';

// ************************************
// 対象ファイル
// ログインディレクトリからの相対位置
// ************************************
$url = 'winofsql.jp/www/homepage/download/WinOfSql102.zip';

// ************************************
// URL
// ************************************
$ftp_server = "ftp://" . $username . ":" . $password . "@" . $url;

// ************************************
// 開始
// ************************************
$ch = curl_init();

// ************************************
// デバッグ用の詳しいメッセージを出力
// ************************************
curl_setopt($ch, CURLOPT_VERBOSE, true); 
$fpe = fopen("./debug.txt","w");
curl_setopt($ch, CURLOPT_STDERR, $fpe);

// ************************************
// 転送用のオプション
// ************************************
curl_setopt($ch, CURLOPT_URL, $ftp_server);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);

// ************************************
// SSL である事の明示
// ※ CURLFTPSSL_ALL と CURLFTPSSL_TRY があります
// ************************************
curl_setopt($ch, CURLOPT_FTP_SSL, CURLFTPSSL_ALL);

// ************************************
// ダウンロードされるファイル
// ************************************
$fp = fopen("./target.zip","w");
curl_setopt($ch, CURLOPT_FILE, $fp);

// ************************************
// 実行
// ************************************
$result = curl_exec($ch);
if($result === false) {
	$result = 'Curl error: ' . curl_error($curl);
}

// ************************************
// 終了
// ************************************
curl_close($ch);

// ************************************
// 後処理
// ************************************
fclose($fp);
fclose($fpe);

print $result . "\n";
?>
OK



タグ:PHP Curl 通信
posted by lightbox at 2014-07-31 14:14 | PHP + 通信 | このブログの読者になる | 更新情報をチェックする

2014年07月30日


ローカルの PHP を使ってコマンドプロンプトより簡単にバイナリファイルをアップロードする

PHP の簡単なコードへ向けて、データをアップロードします。PHP のコードは、『VBscript(または JScript) で簡単にバイナリファイルをアップロードする』を参照して下さい。

コマンドプロンプトからは以下のようにして実行します。
php.exe curl_put.php

cURL 関数を使用するには、Windows では、php.ini で extension=php_curl.dll が必要です。また、ここでは使用していませんが、https に対して実行する場合は、24行と25行のコメントを外して下さい

curl_put.php
<?php
// ***********************
// curl 処理
// ***********************
$curl = curl_init();
curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, 30);
curl_setopt($curl, CURLOPT_HEADER, false);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_URL, "http://yourdomian/put/put.php");
curl_setopt($curl, CURLOPT_PUT, true);

// ***********************
// 読み込むファイル
// ***********************
$file_path = "./winofsql.png";
curl_setopt($curl, CURLOPT_INFILESIZE, filesize ( $file_path ));
$handle = fopen($file_path, "r");
curl_setopt($curl, CURLOPT_INFILE, $handle);

// ***********************
// https 用
// ***********************
//curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
//curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);

// ***********************
// 送信
// ***********************
$result = curl_exec($curl);

// ***********************
// 結果
// ***********************
if($result === false) {
	$result = 'Curl error: ' . curl_error($curl);
}
curl_close($curl);
fclose($handle);

print mb_convert_encoding( $result, "CP932", "UTF-8" ) . "\n";

?>

mb_convert_encoding を使用しているのは、WEB が返すキャラクタセットが UTF-8 で、そのままではコマンドプロンプトで表示できないからです。

関連する記事


タグ:Curl PHP
posted by lightbox at 2014-07-30 23:38 | PHP + 通信 | このブログの読者になる | 更新情報をチェックする

PowerShell より New-Object で .NET Framework を使って簡単にバイナリファイルをアップロードする

New-Object を使うのは、インスタンス作成の為です。コンストラクタに引き渡す為に使用します。その為に、-ArgumentList を使用しますが、[IO.FileMode]::Open 等の定数を使用する場合に直接指定するとエラーになったので、一旦変数にセットして使用しています。

定数の値が知りたい場合は、[IO.FileMode]::Open.value__ で表示されました。そして、[IO.FileMode]::Open という使用方法は、静的なクラスとメソッドの使用方法です。

冒頭の、HttpWebRequest インスタンスの作成でも使用しています。
# ****************************
# HttpWebRequest インスタンス
# ****************************
$myReq = [Net.WebRequest]::Create("http://yourdomain/put/put.php")
$myReq = [Net.HttpWebRequest]$myReq

# ****************************
# FileStream インスタンス
# ****************************
$FileMode = [IO.FileMode]::Open
$FileAccess = [IO.FileAccess]::Read
$fs = New-Object IO.FileStream -ArgumentList "C:\\user\\winofsql.png",$FileMode,$FileAccess
$length = $fs.Length

# ****************************
# バイト配列の作成
# ****************************
[byte[]]$data = New-Object byte[] $length
# ****************************
# 読み込み
# ****************************
$fs.Read($data, 0, $length)
$fs.Close()

# ****************************
# 送信準備
# ****************************
$myReq.Method = "POST"
$myReq.ContentLength = $length

# ****************************
# データを書き込む
# ****************************
$reqStream = $myReq.GetRequestStream()
$reqStream.Write($data, 0, $length)
$reqStream.Close()

# ****************************
# 結果を取得
# ****************************
$myRes = $myReq.GetResponse()
$resStream = $myRes.GetResponseStream()
$sr = New-Object IO.StreamReader -ArgumentList $resStream, [Encoding]::UTF8
$sr.ReadToEnd() # この行で表示
$sr.Close()



関連する記事


posted by lightbox at 2014-07-30 15:18 | PowerShell | このブログの読者になる | 更新情報をチェックする

VB.netとC# : SQL 文を外部テキストにして、String.Format でデータ部分を置き換えて利用する

基本的には、String.Format メソッドのお話ですが、文字列の配列の扱いとの関係での注意事項です。
-- ******************************
-- 社員マスタ更新
-- ******************************

UPDATE 社員マスタ
set 
	氏名 = '{1}',
	給与 = {2},
-- 行コメント
	生年月日 = {3}

where 社員コード = '{0}'

-- 行コメント

行コメントは、正規表現で削除します。{} 部分の個数より、配列が大きい必要があり、Nothing が指定されると、{} ごとなくなります。
※ 配列のリサイズが必要な場合は、Array.Resize メソッドで行います。

VB.net による記述
Imports System.IO
Imports System.Text

Module Module1

	Sub Main()

		' 入力ファイルのパス ( "入力ファイルのパス" と指定する )
		Dim arguments As String() = Environment.GetCommandLineArgs()
		' 引数は一つのみ許可
		If arguments.Length <> 2 Then
			Console.WriteLine("引数を指定して下さい")
			Return
		End If

		' 引数から取得
		Dim BaseFilePath As String = arguments(1)

		' *********************************
		' 主なエンコード
		' *********************************
		' SHIFT_JIS
		Dim SJIS_Enc As Encoding = Encoding.GetEncoding(932)
		' EUC-JP
		Dim UJIS_Enc As Encoding = Encoding.GetEncoding(51932)
		' UNICODE 用
		Dim UNI_Enc As Encoding = Encoding.GetEncoding(1200)
		' UTF-8N
		Dim UTF8N_Enc As New UTF8Encoding()
		' UTF-8
		Dim UTF8_Enc As New UTF8Encoding(True)

		' *********************************
		' UTF-8N で読込み
		' *********************************
		' 読み込み用
		Dim ReadFile As StreamReader = New StreamReader(BaseFilePath, UTF8N_Enc)

		' 読込み
		Dim SqlText As String = ReadFile.ReadToEnd()
		Dim SqlWork As String = SqlText
		Dim SqlResult As String = Nothing

		' 全て読み込んでいるので閉じて解放
		ReadFile.Close()
		ReadFile.Dispose()

		' 行コメントの削除
		SqlWork = RegularExpressions.Regex.Replace( _
		 SqlWork, "([^\n-]*)--[^\n]*\n", "$1" _
		)

		' 改行が入っているので Write
		Console.Write(SqlWork)

		Dim rpl As String() = {"0001", "山田太郎", "100000", "'1980/01/01'"}
		Console.WriteLine("配列の数は {0} です", rpl.Length)

		Console.WriteLine("値を String.Format でセットします")
		SqlResult = String.Format(SqlWork, rpl)
		Console.Write(SqlResult)

		rpl(0) = "0002"
		rpl(1) = "山田花子"
		rpl(2) = "20000"
		rpl(3) = "NULL"
		SqlResult = String.Format(SqlWork, rpl)
		Console.Write(SqlResult)
		Console.WriteLine()

		rpl(0) = "0003"
		rpl(1) = "山田美子"
		rpl(2) = "20000"
		rpl(3) = "'1980/01/01'"
		SqlResult = String.Format(SqlWork, rpl)
		Console.Write(SqlResult)

		' *********************************
		' 終了処理
		' *********************************
		Console.WriteLine("処理が終了しました")

		' 一時停止
		Console.Write("Enterキーを押して下さい : ")
		Console.ReadLine()

	End Sub

End Module


C# による記述
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;

namespace StringFormat
{
	class Program
	{
		static void Main(string[] args)
		{
			// 入力ファイルのパス ( "入力ファイルのパス" と指定する )
			string[] arguments = Environment.GetCommandLineArgs();
			// 引数は一つのみ許可
			if ( arguments.Length != 2 ) {
				Console.WriteLine("引数を指定して下さい");
				return;
			}

			// 引数から取得
			string BaseFilePath = arguments[1];

			// *********************************
			// 主なエンコード
			// *********************************
			// SHIFT_JIS
			Encoding SJIS_Enc = Encoding.GetEncoding(932);
			// EUC-JP
			Encoding UJIS_Enc = Encoding.GetEncoding(51932);
			// UNICODE 用
			Encoding UNI_Enc = Encoding.GetEncoding(1200);
			// UTF-8N
			Encoding UTF8N_Enc = new UTF8Encoding();
			// UTF-8
			Encoding UTF8_Enc = new UTF8Encoding(true);

			// *********************************
			// UTF-8N で読込み
			// *********************************
			// 読み込み用
			StreamReader ReadFile = new StreamReader(BaseFilePath, UTF8N_Enc);

			// 読込み
			string SqlText = ReadFile.ReadToEnd();
			string SqlWork = SqlText;
			string SqlResult = null;

			// 全て読み込んでいるので閉じて解放
			ReadFile.Close();
			ReadFile.Dispose();

			// 行コメントの削除
			SqlWork = System.Text.RegularExpressions.Regex.Replace( 
				SqlWork, "([^\n-]*)--[^\n]*\n", "$1"
			);

			// 改行が入っているので Write
			Console.Write(SqlWork);

			string[] rpl = {"0001", "山田太郎", "100000", "'1980/01/01'"};
			Console.WriteLine("配列の数は {0} です", rpl.Length);

			Console.WriteLine("値を String.Format でセットします");
			SqlResult = String.Format(SqlWork, rpl);
			Console.Write(SqlResult);

			rpl[0] = "0002";
			rpl[1] = "山田花子";
			rpl[2] = "20000";
			rpl[3] = "NULL";
			SqlResult = String.Format(SqlWork, rpl);
			Console.Write(SqlResult);
			Console.WriteLine();

			rpl[0]= "0003";
			rpl[1] = "山田美子";
			rpl[2] = "20000";
			rpl[3] = "'1980/01/01'";
			SqlResult = String.Format(SqlWork, rpl);
			Console.Write(SqlResult);

			// *********************************
			// 終了処理
			// *********************************
			Console.WriteLine("処理が終了しました");

			// 一時停止
			Console.Write("Enterキーを押して下さい : ");
			Console.ReadLine();

		}
	}
}

引数は、プロジェクトのプロパティからデバッグタブを開けて設定します。





posted by lightbox at 2014-07-30 12:31 | VB.NET : ベーシック | このブログの読者になる | 更新情報をチェックする

2014年07月29日


PowerShell より COM オブジェクトを使用して、簡単にバイナリファイルをアップロードする

PHP の簡単なコードへ向けて、データをアップロードします。PHP のコードや、VBScript で書いたアップロードのコードは、『VBscript(または JScript) で簡単にバイナリファイルをアップロードする』を参照して下さい。

Microsoft のドキュメントにおける、COM オブジェクトの作成については、『.NET オブジェクトと COM オブジェクトの作成 』を参照して下さい。

PowerShell における特殊な変数については、『about_automatic_variables』を参照して下さい

PowerShell のソースコード
$objHTTP = New-Object -ComObject Msxml2.ServerXMLHTTP
$Stream = New-Object -ComObject ADODB.Stream

$objHTTP.open( "POST","http://yourdomain/put/put.php", $False )

$Stream.Open()
$Stream.Type = 1
$Stream.LoadFromFile("C:\\user\\winofsql1.png")
$nLen = $Stream.Size
$data = $Stream.Read($nLen)

$objHTTP.setRequestHeader("Content-Length",$nLen)
$objHTTP.send($data)

$objHTTP.responseText


関連する記事


タグ:PowerShell
posted by lightbox at 2014-07-29 13:54 | PowerShell | このブログの読者になる | 更新情報をチェックする

2014年07月25日


VS2010(C#) : HttpWebRequest クラスを使用して WEBアプリにバイナリデータを POST する

C# のコンソールアプリケーションで一般的に WEB アクセスする為に、HttpWebRequest クラスを使用します。

非同期ですと、いくぶん面倒ですが同期処理だと単純です。ここを参考に PowerShell でも利用できると思います。

▼ 以下関連する近い処理
VS2010(C#) : COMの Msxml2.ServerXMLHTTP を使用して WEBアプリにバイナリデータを POST する

C# ソースコード
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net;
using System.IO;

namespace PngUpload2 {
	class Program {
		static void Main(string[] args) {

			HttpWebRequest myReq =
			(HttpWebRequest)WebRequest.Create("http://yourdomain/put/put.php");

			// ****************************
			// ファイルを読み込む為のオブジェクト
			// ****************************
			FileStream fs = new FileStream(
				@"C:\user\web\web\various\put\winofsql.png",
				FileMode.Open, FileAccess.Read);

			// ****************************
			// ファイルを読み込むバイト型配列
			// ****************************
			byte[] bs = new byte[fs.Length];
			// ファイルの内容をすべて読み込む
			fs.Read(bs, 0, bs.Length);
			// 閉じる
			fs.Close();

			myReq.Method = "POST";
			//POST送信するデータの長さを指定
			myReq.ContentLength = bs.Length;

			// ****************************
			// データを書き込む
			// ****************************
			Stream reqStream = myReq.GetRequestStream();
			reqStream.Write(bs, 0, bs.Length);
			reqStream.Close();

			// ****************************
			// 結果を取得
			// ****************************
			WebResponse myRes = myReq.GetResponse();
			Stream resStream = myRes.GetResponseStream();
			StreamReader sr = new StreamReader(resStream, Encoding.UTF8);
			Console.WriteLine(sr.ReadToEnd());
			sr.Close();

			Console.ReadLine();

		}
	}
}

PHP 側については、『VBscript(または JScript) で簡単にバイナリファイルをアップロードする』 を参照して下さい。


関連する記事


タグ:C# framework HTTP
posted by lightbox at 2014-07-25 18:15 | VS(C#) | このブログの読者になる | 更新情報をチェックする

Ruby(mechanize) で PHP からの JSON 経由でデータベース(MySQL)の値を取得

Ruby でデータベースの処理を直接するより、普通に PHP で処理して結果を mechanize で使うと簡単になります。PHP では 現在あらゆるデータベースに対してアクセスする為の情報が豊富なので、Windows 環境でほぼ困る事が無いので、Ruby をスクリプトとして運用で使うのは非常にメリットがあると思います。

json.php(MySQLにアクセスして JSONを返す)
<?php
header( "Content-Type: text/plain; Charset=utf-8" );
header( "pragma: no-cache" );
header( "Expires: Wed, 31 May 2000 14:59:58 GMT" );
header( "Cache-control: no-cache" );

$server = 'localhost';
$db_name = 'lightbox';
$user = 'root';
$password = 'パスワード';

// 接続
$connect = @ new mysqli($server, $user, $password, $db_name);
if ($connect->connect_error) {
	die('Connect Error (' . $connect->connect_errno . ') '
	. $connect->connect_error);
}

// クエリ
$result = $connect->query("select * from 社員マスタ where 社員コード = '0001'"); 
if ( !$result ) {
	die('クエリーに誤りがあります : ' . $connect->error );
}

// 読み出し
$row = $result->fetch_array(MYSQLI_BOTH);

// 開放
$result->close();

// 接続解除
$connect->close();

print json_encode($row);

?>


json_get.rb
#JSON 経由でデータベースの値を取得

require 'mechanize'

agent = Mechanize.new

agent.verify_mode = OpenSSL::SSL::VERIFY_NONE
agent.follow_meta_refresh = true
agent.user_agent = 'Mozilla/5.0 (Windows NT 6.1; Trident/7.0; rv:11.0) like Gecko'

page = agent.get("http://localhost/web/various/db_json/json.php")
obj = JSON.parse((page.body).force_encoding("utf-8"))

i = 0
while i < obj.length / 2
	print obj[i.to_s], "\n"
	i += 1
end

print obj["社員コード"],"\n"
print obj["氏名"],"\n"
print obj["フリガナ"],"\n"
print obj["所属"],"\n"
print obj["性別"],"\n"
print obj["作成日"],"\n"
print obj["更新日"],"\n"
print obj["給与"],"\n"
print obj["手当"],"\n"
print obj["管理者"],"\n"
print obj["生年月日"],"\n"




posted by lightbox at 2014-07-25 13:03 | Ruby | このブログの読者になる | 更新情報をチェックする

2014年07月24日


VS2010(C#) : COMの Msxml2.ServerXMLHTTP を使用して WEBアプリにバイナリデータを POST する

VB.net(2010) : COMの Msxml2.ServerXMLHTTP を使用して WEBアプリにバイナリデータを POST する
VBscript(または JScript) で簡単にバイナリファイルをアップロードする

いずれも同じ処理です。C# では、VB.net に比べていくぶん表現が厳密になっているのが解ります。文字列に使われている @ は、逐語的リテラル文字列と呼ばれており、使いやすさと読みやすさを考慮しています。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using MSXML2;
using System.IO;

namespace PngUpload {
	class Program {
		static void Main(string[] args) {

			// ****************************
			// http 通信用のオブジェクトを作成
			// ****************************
			ServerXMLHTTP60 ServerXML = new ServerXMLHTTP60();

			// ****************************
			// 呼び出す URL を設定
			// ****************************
			String URL  = "http://yourdomain/put/put.php";

			// ****************************
			// POST する為に開く
			// ****************************
			ServerXML.open("POST", URL, false);

			// ****************************
			// タイムアウトの設定
			// ****************************
			int lResolve = 60 * 1000;
			int lConnect = 60 * 1000;
			int lSend = 60 * 1000;
			int lReceive = 60 * 1000;
			ServerXML.setTimeouts(lResolve, lConnect, lSend, lReceive);

			// ****************************
			// ファイルを読み込む為のオブジェクト
			// ****************************
			FileStream fs = new FileStream( 
				@"C:\user\web\web\put\winofsql.png", 
				FileMode.Open, FileAccess.Read);

			// ****************************
			// ファイルを読み込むバイト型配列
			// ****************************
			byte[] bs = new byte[fs.Length];
			// ファイルの内容をすべて読み込む
			fs.Read(bs, 0, bs.Length);
			// 閉じる
			fs.Close();

			// ****************************
			// 送信するデータの長さをヘッダにセット
			// ****************************
			ServerXML.setRequestHeader("Content-Length", bs.Length.ToString());
			// 送信
			ServerXML.send(bs);

			// ****************************
			// 結果の表示
			// ****************************
			Console.WriteLine(ServerXML.responseText);

			Console.ReadLine();

		}
	}
}



関連する記事


タグ:C# com
posted by lightbox at 2014-07-24 21:39 | VS(C#) | このブログの読者になる | 更新情報をチェックする

VB.net(2010) : COMの Msxml2.ServerXMLHTTP を使用して WEBアプリにバイナリデータを POST する

以下のように参照して下さい。


コンソールアプリケーションです。
Imports MSXML2
Imports System.IO

Module Module1

	Sub Main()
		' ****************************
		' http 通信用のオブジェクトを作成
		' ****************************
		Dim ServerXML As New ServerXMLHTTP60()

		' ****************************
		' 呼び出す URL を設定
		' ****************************
		Dim URL As String = "http://yourdomain/put/put.php"

		' ****************************
		' POST する為に開く
		' ****************************
		ServerXML.open("POST", URL, False)

		' ****************************
		' タイムアウトの設定
		' ****************************
		Dim lResolve As Integer = 60 * 1000
		Dim lConnect As Integer = 60 * 1000
		Dim lSend As Integer = 60 * 1000
		Dim lReceive As Integer = 60 * 1000
		ServerXML.setTimeouts(lResolve, lConnect, lSend, lReceive)

		' ****************************
		' ファイルを読み込む為のオブジェクト
		' ****************************
		Dim fs As New FileStream( _
		 "C:\user\web\web\put\winofsql.png", _
		 FileMode.Open, FileAccess.Read)

		' ****************************
		'ファイルを読み込むバイト型配列
		' ****************************
		Dim bs(fs.Length - 1) As Byte
		'ファイルの内容をすべて読み込む
		fs.Read(bs, 0, bs.Length)
		'閉じる
		fs.Close()

		' ****************************
		' 送信するデータの長さをヘッダにセット
		' ****************************
		ServerXML.setRequestHeader("Content-Length", bs.Length)
		' 送信
		ServerXML.send(bs)

		' ****************************
		' 結果の表示
		' ****************************
		Console.WriteLine(ServerXML.responseText)

		Console.ReadLine()
	End Sub

End Module

本来は、.vbs または .js を拡張子として持つスクリプトから実行するものです。

VBscript(または JScript) で簡単にバイナリファイルをアップロードする

参照した Imports MSXML2 によって、Framework からの処理が可能になっています。PHP 側は、スクリプトで利用した PHP と同じもので、バイト配列を直接 POST して PHP では以下のようにして受け取ります
<?
session_start();
$id = session_id();


$fp = fopen( "php://input", "r" );
$wfp = fopen( "image/$id.png", "w" );

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

	fwrite( $wfp, $ret );

}

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


print $id . ".png\n";
?>
で画像が保存されました


この PHP では http ヘッダを指定していませんので、php ソースのキャラクタセットは UTF-8N にする必要があります。他のキャラクタセットで php のソースコードを記述する必要がある場合は、http ヘッダで Content-Type の Charset を明示して下さい。

関連する記事

VB.net : COMの Msxml2.ServerXMLHTTP を使用して http 通信を行う



タグ:VB.NET com
posted by lightbox at 2014-07-24 21:07 | VB.NET : 通信 | このブログの読者になる | 更新情報をチェックする

VBscript(または JScript) で簡単にバイナリファイルをアップロードする

PHP 側も単純ですが、PHP のマニュアルに書いている場所は、少し見付けづらいかもしれません。

内容は PUT メソッドで始まっていますが、VBScript からは POST で問題ありません。実際の内容は、Apache 上で PUT メソッドを PHP でサポートするお話なので、重要なのは PHP での記述方法です。

put.php ( utf-8n )
<?
session_start();
$id = session_id();


$fp = fopen( "php://input", "r" );
$wfp = fopen( "image/$id.png", "w" );

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

	fwrite( $wfp, $ret );

}

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


print $id . ".png\n";
?>
で画像が保存されました

この URL に対して、VBScript のコマンドは POST であろうが、PUT であろうがどちらでもかまいません。

open Method (ServerXMLHTTP/IServerXMLHTTPRequest)
' *************************************
' サーバーオブジェクトを使用しています
' *************************************
Set objHTTP = Wscript.CreateObject("Msxml2.ServerXMLHTTP")
lResolve = 60 * 1000
lConnect = 60 * 1000
lSend = 60 * 1000
lReceive = 60 * 1000

' *************************************
' バイナリファイル
' *************************************
Set Stream = Wscript.CreateObject("ADODB.Stream")
upload_file = "winofsql.png"

' *************************************
' アップロード先
' localhost(AN HTTPD)でテストできます
' *************************************
upload_url = "http://yourdomain/put/put.php"

' *************************************
' 準備
' *************************************
Call objHTTP.Open( "POST",upload_url, False )

' *************************************
' バイナリデータ取得
' *************************************
Stream.Open
Stream.Type = 1
Stream.LoadFromFile(upload_file)
nLen = Stream.Size
data = Stream.Read(nLen)

' *************************************
' 送信
' *************************************
Call objHTTP.SetRequestHeader("Content-Length",nLen)
Call objHTTP.setTimeouts(lResolve, lConnect, lSend, lReceive)
Call objHTTP.Send(data)

Wscript.Echo(objHTTP.responseText)
setRequestHeader Method 
setTimeouts Method
send Method 

Stream オブジェクト

※ Microsoft は VB を真剣にやめたいみたいですね

なので、以下には JScript で書いたソースコードです。JScript では、大文字、小文字が区別されるので、いろいろ注意する必要があります。

upload.js
// *************************************
// サーバーオブジェクトを使用しています
// *************************************
objHTTP = new ActiveXObject("Msxml2.ServerXMLHTTP")
lResolve = 60 * 1000
lConnect = 60 * 1000
lSend = 60 * 1000
lReceive = 60 * 1000

// *************************************
// バイナリファイル
// *************************************
Stream = new ActiveXObject("ADODB.Stream")
upload_file = "winofsql.png"

// *************************************
// アップロード先
// localhost(AN HTTPD)でテストできます
// *************************************
upload_url = "http://yourdomain/put/put.php"

// *************************************
// 準備
// *************************************
objHTTP.open( "POST",upload_url, false )

// *************************************
// バイナリデータ取得
// *************************************
Stream.Open()
Stream.Type = 1
Stream.LoadFromFile(upload_file)
nLen = Stream.Size
data = Stream.Read(nLen)

// *************************************
// 送信
// *************************************
objHTTP.setRequestHeader("Content-Length",nLen)
objHTTP.setTimeouts(lResolve, lConnect, lSend, lReceive)
objHTTP.send(data)

WScript.Echo(objHTTP.responseText)

ActiveXObject オブジェクト



関連する記事


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

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

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

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

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


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

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

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

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

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


Windows
container 終わり

フリーフォントで簡単ロゴ作成
フリーフォントでボタン素材作成
フリーフォントで吹き出し画像作成
フリーフォントではんこ画像作成
ほぼ自由に利用できるフリーフォント
フリーフォントの書体見本とサンプル
画像を大きく見る為のウインドウを開くボタンの作成

Android SDK ポケットリファレンス
改訂版 Webデザイナーのための jQuery入門
今すぐ使えるかんたん ホームページ HTML&CSS入門
CSS ドロップシャドウの参考デモ
Google Hosted Libraries
cdnjs
BUTTONS (CSS でボタン)
イラストAC
ぱくたそ
写真素材 足成
フリーフォント一覧
utf8 文字ツール
右サイド 終わり
base 終わり