ソース掲示板




すべてから検索

キーワード   条件 表示 現行ログ 過去ログ トピックス 名前 本文
【Windows+IE】WEBページ を 自分の PC の一部として使う
日時: 2008/07/28 18:58
名前: lightbox





拡張子:
自分用なので、私は「参照」で表示されるダウンロードダイアログを「開く」で実行しますが
テストする場合は、いったんダウンロードしてから内容を確かめてから実行して下さい。

選択したディレクトリがブラウザ内のフィールドに表示されます

非常に回りくどい事をしてます。
クリップボード使ったほうが、ずっと簡単ですが、
「できる」「できない」という結論と根拠にのみ興味を持てばいいと思います
メンテナンス

main.php ( No.1 )
日時: 2018/02/06 18:50
名前: lightbox


日時: 2018/02/06 18:50
名前: lightbox
拡張子:
まず、「参照ボタンが押されると、getdir.php が定期的に呼び出されてデータがあれば
表示されます。つまり、このデータを「ディレクトリ」として用意するわけですが、
非表示の FORM タグによって loaddir.php が呼び出されます。
拡張子:
<?
header( "Content-Type: text/html; Charset=shift_jis" );
header( "Expires: Wed, 31 May 2000 14:59:58 GMT" );

session_start();
if ( $_COOKIE['service'] == "" ) {
	$_COOKIE['service'] = "ORCL";
}
if ( $_COOKIE['path'] != "" ) {
	$_COOKIE['path'] = trim(str_replace("\\\\","\\", $_COOKIE['path']));
}

$DirHandle = @opendir("./");
if ( $DirHandle ) {
	$Target = readdir( $DirHandle );
	while( $Target !== false ) {

		if ( $Target != "." ) {
			$ext = strrchr( $Target, "." );
			$ext = strtolower($ext);
			if ( $ext == ".vbs" ) {
				$astamp = stat($Target);
				$laststamp = $astamp[9];
				if ( $laststamp < time() - 300 ) {
						@unlink($Target);
				}
			}
		}
		$Target = readdir( $DirHandle );

	}
	
	closedir( $DirHandle );
}

?>

<HTML>
<HEAD>
<META http-equiv="Content-type" content="text/html; charset=shift_jis" />
<STYLE type="text/css">
* {
	font-size: 12px;
}
.column {
	font-weight:bold;
	border-style:solid;
	border-width:1px;
	border-color:#000000;
	padding: 4px;
}
.head {
	background-color:#C0C0C0;
}
</STYLE>

<SCRIPT 
	language="javascript"
	type="text/javascript"
	src="http://lightbox.in.coocan.jp/prototype.js">
</SCRIPT>
<SCRIPT language="javascript" type="text/javascript">

var tid = -1;

function startGetData() {
	if ( tid == -1 ) {
		tid = window.setInterval( "getDir('')", 3000 );
	}
}

function getDir(target) {
     var a = new Ajax.Request(   
         "getdir.php",   
        {   
            method: "get",
            asynchronous: true,
            encoding : "SHIFT_JIS",
            parameters: { "target" : target },
            onSuccess: function(request) {
            },
            onComplete: function(request) {
               if ( request.responseText != '' ) {
                  document.getElementsByName("path")[0].value = request.responseText;
                  window.clearInterval(tid);
                  tid = -1;
               }
            },
            onFailure: function(request) {
                alert('読み込みに失敗しました');
            }
        }
    );
}

</SCRIPT>

</HEAD>

<BODY>
<FORM
	method="POST"
	action="oraclecsv.php"
>
<TABLE
	border=1
	style='
		border-collapse:collapse;
		border-style:solid;
		border-width:1px;
		border-color:#000000;
	'
>
<TR>
	<TD class="column head">PC名</TD>
	<TD class="column">
	<INPUT
		type="text"
		name="pcname"
		value="<?= $_COOKIE['pcname'] ?>"
		style='width:200px;'
	>&nbsp;&nbsp;サービス名
	<INPUT
		type="text"
		name="service"
		value="<?= $_COOKIE['service'] ?>"
		style='width:50px;'
	>&nbsp;&nbsp;
	</TD>
</TR>
<TR>
	<TD class="column head">ユーザー</TD>
	<TD class="column">
	<INPUT
		type="text"
		name="user"
		value="<?= $_COOKIE['user'] ?>"
		style='width:200px;'
	>&nbsp;&nbsp;
	</TD>
</TR>
<TR>
	<TD class="column head">パスワード</TD>
	<TD class="column">
	<INPUT
		type="password"
		name="pass"
		value="<?= $_COOKIE['pass'] ?>"
		style='width:200px;'
	>&nbsp;&nbsp;
	</TD>
</TR>
<TR>
	<TD class="column head">テーブル名</TD>
	<TD class="column">
	<INPUT
		type="text"
		name="table"
		value="<?= $_COOKIE['table'] ?>"
		style='width:400px;'
	>&nbsp;&nbsp;
	</TD>
</TR>
<TR>
	<TD class="column head">保存パス</TD>
	<TD class="column">
	<INPUT
		type="text"
		name="path"
		style='width:400px;'
	>&nbsp;&nbsp;
	<INPUT
		type="button"
		value="参照"
		onClick='document.getElementById("loaddir").submit();startGetData();'
	>
	</TD>
</TR>

<TR>
	<TD class="column" colspan="2">
	<INPUT
		type="submit"
		name="send"
		value="送信"
	>
	</TD>
</TR>

</TABLE>
</FORM>

<FORM
	id="loaddir"
	method="GET"
	action="loaddir.php"
	style='display:none'
>
	<INPUT
		type="text"
		name="domain"
	>
</FORM>

</BODY>
</HTML>
<SCRIPT language="javascript" type="text/javascript">
	document.getElementsByName("domain")[0].value = location.host;
</SCRIPT>
このアーティクルの参照用URLをクリップボードにコピー メンテナンス
loaddir.php ( No.2 )
日時: 2008/07/28 19:34
名前: lightbox
拡張子:
main.php から呼び出された場合は、ローカルで実行する為の VBScript
のコードを作って、header( "Location: $flname" ); でリダイレクトして、
ダウンロードさせます。

この時、セッション ID を埋め込んでおいて、Msxml2.ServerXMLHTTP.3.0 で
直接自分自身と通信して、選択したディレクトリ情報をセッションに保存します
拡張子:
<?
mb_language( "ja" );
mb_internal_encoding("UTF-8");

if ( $_GET['sessionget'] == 'y' ) {
	ini_set("session.use_trans_sid", "1");
	ini_set("session.use_cookies", "0");
	session_start();
	$_SESSION['dir'] = str_replace("\\\\","\\", $_GET['dir']);

$_SESSION['dir'] = mb_convert_encoding( $_SESSION['dir'], "SHIFT_JIS", "UTF-8" );
print "OK" . $_SESSION['dir'];
}
else {
	session_start();
	$sid = session_id();
	$str = <<<VBS
' **********************************************************
' オブジェクト作成
' **********************************************************
Set Shell = CreateObject( "Shell.Application" )

Set obj = Shell.BrowseForFolder( 0, strTitle, 11, 0 )
if obj is nothing then
	Wscript.Quit
end if
if not obj.Self.IsFileSystem then
	MsgBox( "ファイルシステムではありません" )
	Wscript.Quit
end if

Set sc = CreateObject("ScriptControl")
sc.Language = "JScript"
Set js = sc.CodeObject

strUrl = "http://{$_GET['domain']}{$_SERVER['PHP_SELF']}"
strUrl = strUrl & "?PHPSESSID={$sid}&sessionget=y&dir=" & js.encodeURI(obj.Self.Path)

Set objSrvHTTP = CreateObject("Msxml2.ServerXMLHTTP.3.0")

on error resume next
Call objSrvHTTP.Open("GET", strUrl, False )
if Err.Number <> 0 then
	MsgBox( "HTTP エラーです" )
	Wscript.Quit
end if
on error goto 0

objSrvHTTP.Send

VBS;

	$flname = "getdir" . session_id() . ".vbs";
	file_put_contents($flname,$str);
	header( "Location: $flname" );
}
?>
このアーティクルの参照用URLをクリップボードにコピー メンテナンス
getdir.php ( No.3 )
日時: 2008/07/28 19:36
名前: lightbox
拡張子:
ブラウザ上で定期的データを呼び出すようになっているインターバルタイマによって
セッションデータが取り込まれます
拡張子:
<?
header( "Content-Type: text/html; Charset=shift_jis" );
header( "Expires: Wed, 31 May 2000 14:59:58 GMT" );
session_start();
print $_SESSION['dir'];
$_SESSION['dir'] = "";
?>
このアーティクルの参照用URLをクリップボードにコピー メンテナンス
oraclecsv.php ( No.4 )
日時: 2008/07/28 19:38
名前: lightbox
拡張子:
参照したディレクトリを元に Oracle のCSV出力のコードが書かれた VBScript を
ダウンロードする為の PHP コードです
拡張子:
<?
if ( $_POST['pcname'] != '' ) {
	session_start();
	setcookie("pcname", $_POST['pcname'], time()+3600*24*30);
	setcookie("service", $_POST['service'], time()+3600*24*30);
	setcookie("user", $_POST['user'], time()+3600*24*30);
	setcookie("pass", $_POST['pass'], time()+3600*24*30);
	setcookie("table", $_POST['table'], time()+3600*24*30);
	$_POST['path'] = trim(str_replace("\\\\","\\", $_POST['path']));
	setcookie("path", $_POST['path'], time()+3600*24*30);
	if ( trim( $_POST['service'] ) != "" ) {
		$_POST['service'] = '/' . $_POST['service'];
	}
	$str = <<<VBS
' **********************************************************
' オブジェクト作成
' **********************************************************
Set Cn = CreateObject( "ADODB.Connection" )
Set Rs = CreateObject( "ADODB.Recordset" )
Set Fs = CreateObject( "Scripting.FileSystemObject" )

strDriver = "{Microsoft ODBC for Oracle}"
strServer = "{$_POST['pcname']}{$_POST['service']}"
strUser = "{$_POST['user']}"
strPass = "{$_POST['pass']}"

strTable = "{$_POST['table']}"

ConnectionString = _
	"Provider=MSDASQL" & _
	";Driver=" & strDriver & _
	";Server=" & strServer & _
	";UID=" & strUser & _ 
	";PWD=" & strPass & _ 
	";" 

' **********************************************************
' 接続
' **********************************************************
on error resume next
Cn.Open ConnectionString
if Err.Number <> 0 then
	Wscript.Echo Err.Description
	Wscript.Quit
end if
on error goto 0

' **********************************************************
' 列情報取得
' **********************************************************
Query = "select * from USER_TAB_COLUMNS"
Query = Query & " where TABLE_NAME = '" & strTable & "'"
Query = Query & " order by COLUMN_ID"

on error resume next
Rs.Open Query, Cn
if Err.Number <> 0 then
	Cn.Close
	Wscript.Echo Err.Description
	Wscript.Quit
end if
on error goto 0

Query = "select "
CsvTitle = ""
Do While not Rs.EOF
	if CsvTitle <> "" then
		Query = Query & "||','||"
		CsvTitle = CsvTitle & ","
	end if
	Query = Query & Rs.Fields("COLUMN_NAME").Value
	CsvTitle = CsvTitle & Rs.Fields("COLUMN_NAME").Value
	Rs.MoveNext
Loop
Query = Query & " from " & strTable
Rs.Close

' **********************************************************
' データ取得用クエリー
' **********************************************************
on error resume next
Rs.Open Query, Cn
if Err.Number <> 0 then
	Cn.Close
	Wscript.Echo Err.Description
	Wscript.Quit
end if
on error goto 0

' **********************************************************
' 出力ファイルオープン
' **********************************************************
Set Csv = Fs.CreateTextFile( "{$_POST['path']}\\{$_POST['table']}.csv", True )

' **********************************************************
' タイトル出力
' **********************************************************
Csv.WriteLine CsvTitle

' **********************************************************
' データ出力
' **********************************************************
Do While not Rs.EOF
	Csv.WriteLine Rs.Fields(0).Value
	Rs.MoveNext
Loop

' **********************************************************
' ファイルクローズ
' **********************************************************
Csv.Close

' **********************************************************
' レコードセットクローズ
' **********************************************************
Rs.Close

' **********************************************************
' 接続解除
' **********************************************************
Cn.Close

' **********************************************************
' オブジェクト解放
' **********************************************************
Set Fs = Nothing
Set Rs = Nothing
Set Cn = Nothing

Wscript.Echo "処理が終了しました"

VBS;
$flname = "oraclecsv" . session_id() . ".vbs";
file_put_contents($flname,$str);
header( "Location: $flname" );
}
else {
	header( "Location: main.php" );
}
?>
このアーティクルの参照用URLをクリップボードにコピー メンテナンス