SQLの窓 イラストAC フリー素材

2014年10月29日

VBScript から実行する PHPコードの PDF処理のサンプル

PDF 処理を行う為に、PHP を利用していますが、実行はエクスプローラから VBScript(WSH) の実行として開始します。

PDF の処理としては少し古いですが、FPDF を使用しています。

php.exe にパスが通っている必要があります

PDF を扱う為のライブラリは、全て WEB 上に置いてますので、インターネットさえ繋がっておれば、どこからでも利用できます。WSH のインラインストリームというか、ソースの中に PHP のソースがあるのがミソです。PHP は、テンポラリファイルとして書き出されて、スクリプトがあるディレクトリに PDF が作成されます。

実行すると、フォルダ選択ダイアログが表示されて、その中のファイルサイズを取得して PDF に出力します。

最後の処理として、PDF を表示する為に、Windows に登録されている .pdf の拡張子に対するアプリケーション(普通は Adobe Reader)で開くようになっていますが、無い場合は対象となるアプリケーションが無いというメッセージが表示されます。



folder_size_phppdf.wsf
<JOB>
<COMMENT>
*********************************
 WEB WSH 実行スケルトン
 ★★★ PDF 作成 ★★★
*********************************
</COMMENT>

<COMMENT>
*********************************
 外部スクリプト定義
*********************************
</COMMENT>
<SCRIPT
	language="VBScript"
	src="http://homepage2.nifty.com/lightbox/laylaClass.vbs">
</SCRIPT>

<SCRIPT language=VBScript>
' *******************************
' 処理開始
' *******************************
Call laylaFunctionTarget( "http://homepage2.nifty.com/lightbox/" )
Call laylaLoadFunction( "baseFunction.vbs" )

target = SelectDir( "対象フォルダを選択して下さい" )
if target = "" then
	Wscript.Quit
end if

strParam = "$DIR," & Replace( ScriptDir, "", "" )
strParam = strParam & ",$TARGET," & Replace(target, "", "")
Call RunPhpParam( "TargetList", False, strParam )

</SCRIPT>

<COMMENT>
*********************************
 実行する PHP ( php.exe にパスが通っている必要があります )
 php5 でテストしています
 php.ini の allow_url_include を On にして下さい
*********************************
</COMMENT>
<RESOURCE id="TargetList">
<![CDATA[
<?php
error_reporting(E_ALL & ~E_DEPRECATED);
require('http://homepage2.nifty.com/lightbox/phppdf/japanese.php');

$GLOBALS['margin'] = 5;

$pdf = new PDF_Japanese( 'P', 'mm', 'A4' );

$pdf->AddSJISFont("MSPGothic");
$pdf->AddPage();
# 塗りつぶす為の色
$pdf->SetFillColor( 200, 230, 185 );

# タイトル印字
$pdf->SetFont('SJIS','B',20);
$text = 'ディレクトリ容量の表示';
$pdf->Text( $GLOBALS['margin'], 13.5, $text );

# 通常印字フォント
$pdf->SetFont('SJIS','',10);
# ページ内の印字開始高さ
$pdf->Ln(10);

$Fso = new COM("Scripting.FileSystemObject");
$Folder = $Fso->GetFolder("$TARGET");
$SubFolder = $Folder->SubFolders;

$pdf->SetX( $GLOBALS['margin'] );
$pdf->SetTextColor( 0, 0, 255 );
$pdf->Cell( 100, 6, "ディレクトリ名称" , 1, 0, 'C', 1 );
$pdf->SetTextColor( 0, 0, 0 );
$pdf->Cell( 20, 6, "サイズ", 1, 0, 'C', 0 );
$pdf->Ln();

foreach($SubFolder as $obj) {

	$pdf->SetX( $GLOBALS['margin'] );
	$pdf->SetTextColor( 0, 0, 255 );
	$pdf->Cell( 100, 6, $obj->Name, 1, 0, 'L', 1 );
	$pdf->SetTextColor( 0, 0, 0 );

	try {
		$pdf->Cell( 20, 6, trim((floor($obj->Size / 1000) / 1000)), 1, 0, 'R', 0 );
	}
	catch( Exception $e ) {
		$pdf->Cell( 20, 6, "エラー", 1, 0, 'L', 1 );
	}

	$pdf->Ln();

}


$pdf->Output("$DIR\sample.pdf");

# *******************************
# Windows 経由の 外部実行
# *******************************
$WshShell = new COM("WScript.Shell");
$command = "RunDLL32.EXE shell32.dll,ShellExec_RunDLL ";
$command .= ""$DIR\sample.pdf"";
$WshShell->Run( $command, 1, TRUE );

print "処理が終了しました\n";

?>
]]>
</RESOURCE>

</JOB>

※ 初回投稿 : 2007-03-14


posted by at 2014-10-29 01:04 | VBScript | このブログの読者になる | 更新情報をチェックする

2014年10月18日

2012年04月21日 時点の Three.js の WebGL チェックと 2014年 7月17日(r68) のチェック

この結果を console.log で表示してみましたが、うまく動作している事を確認しました。この処理は一行にして実行文扱いで戻り値を true か false で返すので、if(){} の 条件式の部分に記述できます。
WebGLRenderingContext は canvas に WebGL の描画命令を発行するためのオブジェクトです。
コンテキスト名 "experimental-webgl" は、仕様書が策定中の間に使用する一時的な名称です。仕様書が確定した後は、"webgl" という名称が使われます。
なんですが、見事に IE11 だけ false になりました。。。。。
(function() {
    try {
        return !!window.WebGLRenderingContext && !!document.createElement('canvas').getContext('experimental-webgl');
    } catch(e) {
        return false;
    }
})()



▼ 最新
(function() {
    try {
        var canvas = document.createElement('canvas');
        return !! window.WebGLRenderingContext && (canvas.getContext('webgl') || canvas.getContext('experimental-webgl'));
    } catch(e) {
        return false;
    }
})()
どう意味あいかは解りませんが、とても念入りになっていました。webgl と experimental-webgl を両方チェックしているところが、何とも涙ぐましいような気もします。


posted by at 2014-10-18 23:24 | Three.js : ベーシック | このブログの読者になる | 更新情報をチェックする

うーーん、困った ( 文字で顔画像 / フリーフォントでアイコン・はんこ画像作成 )

困った困った。

どうしよう。


うーーーん。
画像作成を再現 ( フリーフォントでアイコン・はんこ画像作成 )
<pre>
困った困った。

どうしよう。


うーーーん。<div style='display:inline;position:relative;vertical-align:top;'><img src="https://lh3.googleusercontent.com/-9tnSyXr_TGQ/VEJQADjs9RI/AAAAAAAAXLI/-ypibXwUJuk/s200/_img.png" style='position:absolute;left:0px;top:-25px;border:0px' /></div> 




</pre>
画像は Picasa 画像なので、s200 を小さくすれば以下のようになります
困った困った。

どうしよう。


うーーーん。
posted by at 2014-10-18 20:38 | フリーフォントではんこ画像 | このブログの読者になる | 更新情報をチェックする

2014年10月16日

Perl 用 HTML および変数の埋め込み手法

Perl 用 HTMLおよび変数の埋め込み手法 : ソース掲示板

なんか久しぶりに Perl を触る機会があったので。
#!/usr/local/bin/perl

print "Content-type: text/html\n\n";


$head_height = "150";
$head_inner = "<b>ヘッド部分</b>";
&get_data( "head_unit", "./head.htm" );

$main_width = "950";
&get_data( "main_html", "./disp.htm" );

print $main_html;

#-------------------------------------------------
# 埋め込み用データ取得
#-------------------------------------------------
sub get_data {

	local($var_name,$file_path) = @_;
	local($buffer) = "\$$var_name = <<"HTML_DATA";\n";

	open(IN,$file_path);
	while (<IN>) {
		$buffer .= $_;
	}
	close(IN);

	$buffer .= "HTML_DATA";

	eval( $buffer );

}

これは、eval を使用して、ヒアドキュメントを文字列上で実行してしまって、変数に外部ファイルの内容を読み込むだけではなく、外部ファイル内にある $ で始まる文字列も同時にパースして置き換えてしまう処理です。



posted by at 2014-10-16 00:37 | その他 | このブログの読者になる | 更新情報をチェックする

2014年10月15日

PHP + GD : 四角形への DropShadow



グラデーション方法のサンプル

how to create thumbnail + shadow by this script
/* offset of drop shadow from top left */
define ( "DS_OFFSET" , 5 );
 
/* number of steps from black to background color /*
define("DS_STEPS", 10);
 
/* distance between steps */
define ( "DS_SPREAD" , 1 );
 
/* define the background color */
$background = array( "r" => 255 , "g" =>  255 , "b" =>  255 );

// 元のサイズに対して、影のサイズを含めた新しい幅と高さを決定します
$width = $o_width + DS_OFFSET ;
$height = $o_height + DS_OFFSET ;
$image = imagecreatetruecolor ( $width , $height );
 
/* determine the offset between colors */
$step_offset = array( "r" =>  ( $background [ "r" ] / DS_STEPS ), "g" =>  ( $background [ "g" ] / DS_STEPS ), "b" =>  ( $background [ "b" ] / DS_STEPS ));
 
/* calculate and allocate the needed colors */
$current_color = $background ;
for ( $i = 0 ; $i <= DS_STEPS ; $i ++) {
	$colors [ $i ] = imagecolorallocate ( $image , round ( $current_color [ "r" ]), round ( $current_color [ "g" ]), round ( $current_color [ "b" ]));
 
	$current_color [ "r" ] -= $step_offset [ "r" ];
	$current_color [ "g" ] -= $step_offset [ "g" ];
	$current_color [ "b" ] -= $step_offset [ "b" ];
}
 
// 一番外側の四角
imagefilledrectangle ( $image , 0 , 0 , $width , $height , $colors [ 0 ]);
 
// だんだん小さく、色を濃く 
for ( $i = 0 ; $i < count ( $colors ); $i ++) {
	imagefilledrectangle ( $image , DS_OFFSET , DS_OFFSET , $width , $height , $colors [ $i ]);
	$width -= DS_SPREAD ;
	$height -= DS_SPREAD ;
}
ボックスをすこしづづ小さく薄く描画して、最終的には、imageconvolution でガウス分布のぼかしを実行しています( ガウス分布のぼかしは、マニュアルのサンプルにあります )
<?php
$image = imagecreatetruecolor(180,40);

imagestring($image, 5, 10, 8, 'Gaussian Blur Text', 0x00ff00);
$gaussian = array(
	array(1.0, 2.0, 1.0),
	array(2.0, 4.0, 2.0),
	array(1.0, 2.0, 1.0)
);
imageconvolution($image, $gaussian, 16, 0);




タグ:gd
posted by at 2014-10-15 23:20 | PHP | このブログの読者になる | 更新情報をチェックする

2014年10月11日

PHP : ログインとブラウザの当日日付データ

仕様の問題ですが、出退勤の日付用としてクライアントのデバイスが持つ日付を使う為に、データベース用の書き込みデータや SELECT 文で読み出す条件としての日付を文字列で取得したいわけです。

その為に作った JavaScript のメソッド

JavaScript の String と Date オブシェクトに、9999/99/99 書式の文字列日付を取り出すメソッドを追加する

要するに『(new Date()).sdate("-")』で取得します。

でまあ、最初に仕込む場所としてログインが最も妥当かなぁと思いますし、そもそもログインでセッションとしてログインした事を保存するので、セッションに日付をセットしておく事にします。画面遷移のたびに取得してもいいですが、日付をまたぐ運用を行うようなアプリケーションでのみ、操作手順(オプション)の一つとして『再取得』を用意すればいいと思うわけです。

関連する記事

hash_hmac は秘密鍵があるので、辞書の総当りとかでパスワードは解りませんから。パスワード抜かれるのは、フィッシングがスパイウェアか、本人が口に出した場合ですね。



タグ:PHP
posted by at 2014-10-11 18:08 | PHP | このブログの読者になる | 更新情報をチェックする

2014年10月10日

hash_hmac は秘密鍵があるので、辞書の総当りとかでパスワードは解りませんから。パスワード抜かれるのは、フィッシングがスパイウェアか、本人が口に出した場合ですね。

ただの hash なら、md5 で password は 5f4dcc3b5aa765d61d8327deb882cf99 ですね(Google で 15,300 件ヒット)。サーバーのデータベースにもし生のパスワードが入ってたら大笑いですが、どんなにアホでもサーバーの責任を回避する手段として、サーバー側が解読できるパスワードなんて保存しないというか、誰が考えてもしたく無いです。
<?php

print hash_hmac("md5","password","lightbox") . "\n";

//0b8d1a7cf74154638a19eb9958b8e475

print hash_hmac("md5","password","2014") . "\n";

//27ad87de8ac47d30710f9144ba48d7fa

?>

よく、パスワードを忘れたら新しいパスワードを入力します。たまーーにパスワード送って来るシステムがありますが、暗号化してデータベースに保存しているのでしょう。余程運用に自信があるか、そこまでしてもメリットのあるサービスが運営されているはずです。
<?php
session_start();
header( "Content-Type: text/html; Charset=utf-8" );
header( "pragma: no-cache" );
header( "Expires: Wed, 31 May 2000 14:59:58 GMT" );
header( "Cache-control: no-cache" );
// 日本語

if ( $_SERVER['REQUEST_METHOD'] == 'POST' ) {

	if ( hash_hmac( 'sha256',$_POST['pass'], "himitsu" ) == 'a15c6fe4973d69106646f5304c44a03ef41490d964e9bcca4f0848431b9cfe0b' ) {
		$_SESSION['login'] = 'yes';
		header('Location: http://localhost/web/1008/005/control.php');
		exit();
	}

}

//print "<pre>";
//print_r($_SERVER);
//print "</pre>";

?>
<!DOCTYPE html>
<html>
<head>
<meta content="text/html; charset=utf-8" http-equiv="Content-Type">
</head>
<body>
<form method="post">
<input type="password" name="pass">
<input type="submit" name="send">
</form>
</body>
</html>



ですから、パスワードが盗まれるのはこういう経路ではなく、フィッシング詐欺です。

フィッシング詐欺の出発点は、メールから内容で不安感を煽って直接パスワードを入力させるもので、向こう側でそのパスワードがダイレクトに手に入ります。普通は気が付きますが、中には気がつかない人も居るわけで、悪い奴はハナからそういう人を狙ってます。

しかし、もっとあくどいのが、スパイウェアでして、こいつにやられたらキー入力とか全部バレたりするので正しい処理をしていてもパスワードが盗まれます。

実際は、銀行側の機能で対処します

オンラインバンキングでは、一時パスワードを処理毎に発行できるようになるのが普通で、楽天銀行だとお金を移動するのに、3つのパスワードと2つの一時パスワードが必要です。そこまでしてて盗まれたらお手あげですが、そもそもオンライン銀行にバカみたいに高額のお金を置かなければいいので、取引銀行の機能としてオンラインバンキングするのでは無く、オンラインバンキング専用の銀行を別に用意すればいいですね。

セキュリティキーボード

毎回変換配置の変わるキーボードですね。マウスでクリックするのが普通ですが、毎回変わるのでキーボードでもかまわないという特徴もあります(a と入れたい場合に x だったり 8 だったり)。これを使うと悪者はお手上げのはずです。

ワンタイムパスワードの送り先

ハードを借りるという単純なものもありますが、インターネットだとメールアドレスに送ったりするものもあります。その場合、携帯やスマホへ送るようにすれば、やはり悪者はお手上げです。



posted by at 2014-10-10 23:54 | PHP | このブログの読者になる | 更新情報をチェックする

すごく当たり前の事なんですが、UTF-8N で保存されたテキストファイルをメモ帳で変更して保存したら先頭に EF BB BF という爆弾が仕掛けられるのでダメですよ

PHP で以下のような SQL を保存するわけです。もちろん UTF-8N で。
select 
	社員マスタ.*,
	DATE_FORMAT(生年月日,'%Y/%m/%d') as 誕生日
 from 社員マスタ
 where
	社員コード = '{$_GET['syainCode']}'

それを、メモ帳で読むと普通に読めるので、知らない初心者はそのまま SQL を変更して保存する。しかし、実行時に SQL の先頭には余計なデータが付加されているので、SQL はエラーとなる。たいていは初心者なので原因が解らず、かなり脱出困難なループに入ってしまいます。

上級者でも、まさかメモ帳で書き換えたとは気がつかずに原因を特定するのにそれなりに時間がかかる場合があります。勘のいい、もしくは運のいい先輩プログラマなら、すぐ対応できるでしょうが・・・

文字通りの BOM(B)

実際は、バイトオーダーマーク (byte order mark) というものですが、こういうシチュエーションでは爆弾の一種ですね。




確認用簡易ダンプ

「送る」に入れる簡易ダンプ




posted by at 2014-10-10 20:34 | PHP | このブログの読者になる | 更新情報をチェックする

Cscript.exe の引数と、Windows Script Host を無効にするレジストリ設定

通常、こんな事をする必要は無いのですが、万が一こんな目にあって作業できない時は、これでなんとかなるかもしれません。
>cscript.exe
Microsoft (R) Windows Script Host Version 5.8
Copyright (C) Microsoft Corporation 1996-2001. All rights reserved.

使い方 : CScript scriptname.extension [オプション...] [引数...]

オプション :
 //B         バッチ モード : スクリプトのエラーおよびプロンプトを非表示にする
 //D         アクティブ デバッグを使用可能にする
 //E:engine  スクリプト実行時にエンジンを使用する
 //H:CScript 既定のスクリプト ホストを CScript.exe に変更する
 //H:WScript 既定のスクリプト ホストを WScript.exe に変更する (既定値)
 //I         対話モード (既定値、//B と逆の動作)
 //Job:xxxx  WSF ジョブを実行する
 //Logo      ロゴを表示する (既定値)
 //Nologo    ロゴを表示しない : 実行時に見出しを表示しない
 //S         このユーザーの現在のコマンド ライン オプションを保存する
 //T:nn      秒単位のタイムアウト時間 :  スクリプトを実行できる時間の最大値
 //X         デバッガでスクリプトを実行する
 //U         コンソールからリダイレクトされた I/O に Unicode を使用する

ちなみに、以下は WSH が起動しなくなる設定です
Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows Script Host\Settings]
"DisplayLogo"="1"
"ActiveDebugging"="1"
"SilentTerminate"="0"
"UseWINSAFER"="1"
"Enabled"="0"
C:\Documents and Settings\lightbox>cscript
CScript エラー: Windows Script Host へのアクセスがこのコンピュータ上で無効にされ
ています。詳細については、管理者に連絡してください。
posted by at 2014-10-10 13:23 | VBScript | このブログの読者になる | 更新情報をチェックする

操作手順書作るなら・・・今なら Bandicam かな?( GIF アニメで操作手順なら GifCam )

こういう目的用のフリーソフトはたくさんあって、ブラウザの拡張でも結構多いですが、動画的な要素がすぐに扱えるという意味で、Bandicam がいいです。

長い動画は有償ですが、静止画はフリーで使えます。ただちょっとウインドウ操作にクセがあるので慣れるまでかかるかもしれませんが、その場でキャプチャするというより、透過ウインドウを用意するから、自由に工夫してキャプチャしよう・・・というようなノリになります。

そのウインドウの表示・非表示が初期バージョンでショートカットが不十分だったのですが、今は、CTRL + ALT の H で切り替え可能になっています。



あと、GIF アニメとしてデスクトップをキャプチャして、テキストで解説を簡単に入れたりできる GifCam はおすすめです。ただ、オリジナルサイトからダウンロードしないと、そのへんに落ちてるのは、広告的なスパイウェア等がくっついてる可能性があるので注意です( 作者さんが警告してました )

GifCam comes free from any harmful/adware software. I found some websites hosting GifCam and bundling it with malware/adware/toolbars..
make sure to get it from this official webpage latest version 4.0.
▼ この絵のところを目指して下さい
posted by at 2014-10-10 13:07 | フリーソフト | このブログの読者になる | 更新情報をチェックする
Seesaa の各ページの表示について
Seesaa の 記事がたまに全く表示されない場合があります。その場合は、設定> 詳細設定> ブログ設定 で 最新の情報に更新の『実行ボタン』で記事やアーカイブが最新にビルドされます。

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

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

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

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


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

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

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

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

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