2011年12月11日日曜日

ASP.NET:処理が重い

ASP.NETパフォーマンスについて・・・

・できるだけ ViewState を使用しない
 特に DataGrid コントロール使用時
・Web.config の設定を変更する
・ページキャッシュを有効にする
・不要な httpModules を取り除く
・Trace を false にする
・profiles のオートセーブを無効にする
・debug を false にする
・キャッシュの仕組みを組み込む
・スタイルシートを最適化する
・余計な宣言を削除
・JavaScript を最適化する → 参考
・JavaScript と CSS の読み込み場所を変える
・マスターページのトップで CSS を読み込む
・マスターページの最後に JavaScript を読み込む
・response.redirect() の代わりに server.transfer() を利用する
・クライアントサイドで入力チェックする

asp.netプリコンパイル
aspnet_compiler -v PreCompile -p D:\Inetpub\wwwroot\PreCompile d:\PreCompile
※PreCompileというのはプロジェクトの名前

ASP.NET:web.configが反映されない

web.configはルート直下におくこと。
web.configが複数ある場合、machine.configを適切に設定しないと怒られることがあります。

ASP.NET:文字化けする

ファイル保存(UTF-8)は、BOMをつけること。

2011年12月5日月曜日

ASP.NET:バリデータのあれこれ

バリデータ(validator)
便利でもあるが、ちょっと躓きやすいシロモノでもある。

jQueryチックにクライアントサイドでバリデーションが走るのがいいがフォーカス移動でもチェックが走ってしまったりする。
ウェブコントロールにCausesValidation=Falseをつけたり、javascriptでValidatorEnableを設定してみたりで有効無効を制御。

ちなみにjsガワでの制御は
function RadioButton2_OnClick(){
 if (typeof(ValidatorEnable) == 'function') {
  var RequiredFieldValidator4 = document.getElementById("ctl00_MainContentHolder_RequiredFieldValidator4");
  ValidatorEnable(RequiredFieldValidator4, false);
 }
}
こんな感じ。
ただValidatorEnableについてはけっこう情報が少なくて正直これであっているのかも不思議。

2011年12月4日日曜日

ASP.NET Label:とLiteral:の違い

asp:Labelコントロールに対してはスタイル系プロパティを設定可能だが、asp:Literalコントロールには設定できない
(Labelコントロールはspanにかこまれて出力されるため)

ASP.NET:object data sourceにプログラムからパラメータをセットする方法


  
  
  


こんな感じでaspに記述されてるとして、コードから
sample.SelectParameters("sampleID") = XXXX
とやっても「読み取り専用です」と怒られてしまう。
sample.SelectParameters("sampleID") = New Parameter("sampleID", TypeCode.String, sampleID)
とParameterオブジェクトをNewして無理矢理いれることが出来る。

2011年11月22日火曜日

ASP.NET:2つのドロップダウンの動的制御

【ドロップダウン連携】
たとえばふたつのドロップダウンで、ひとつめのドロップダウンをロード時に値を入れ、値が選択された後にふたつめの値を動的に制御する場合、Load, PreRenderでドロップダウン1のvalueを決めて、PreRenderCompleteイベントででドロップダウン2の値を入れるやり方がある。

※多分です。

ASP.NET:動的にコントロールを生成するときの注意

【LoadControlメソッドなどで動的にコントロールを生成するケース】

表示しかしないないコントロールはPreRenderイベントで生成OKだが、ボタン押下などのイベントを扱うコントロール:PreRenderイベントで生成したのでは正常に動作せず、Loadイベント終了時までに生成されている必要がある。

ASP.NET:イベント発生順序

ASP.NETはイベント発生順序に結構気を使う。
基本は以下のとおり。

<APS.NETページロード>
1) Init
2) Load
3) PreRender
4) Unload

<ボタンクリック時>
1) Load
2) Button_Click
3) PreRender

2011年11月20日日曜日

ASP.NET メモ

ASP.NETメモ

・HTMLフォームコントロール
runat="server"を指定

・フォームデータ遷移が、ページ⇔ページではなく
同一ページでデータの読み込み・受け渡しをする。
(postback)

・複数のHTMLコントロールは指定できず、遷移先は全て自身のアドレスを指定

・サーバコントロールは自動管理
自分にポストした情報(何を選択しているか、など)が保管される

・Buttonコントロールで、はじめてPostBackが発生
(やり方によるけど、基本は)

・(bool) IsPostBack関数で、ポストバックか非ポストバックを判断する
※非ポストバックは、いわゆるはじめてページに飛んできたとき
PageInit→状態復元→PageLoad(ここで初期化)
(この状態復元の段階で、リスト値はPageLoadを実行せずとも復元されている)

・コードビハインドは?
vbとasp.netページをわけること。
vbクラスの中に public class CLASSNAME [inherits] System.Web.UI.Pageで指定

【vbコード】
<%@ PAGE LANGUAGE="C#" Inherits="HogeHoge" Src="sample02.aspx.cs" %>
<html>
<body>
<form runat="server">
<asp:TextBox id="textEMail" runat="server"></asp:TextBox>
</form>
</body>
</html>
【ASP.NETページ】
public class HogeHoge : System.Web.UI.Page {
  protected System.Web.UI.WebControls.TextBox textEMail;

  private void Page_Load(object sender, System.EventArgs e) {
    textEMail.Text = "あいうえお";
  }
}

といったよう。

・データバインドとは?

データ「連結」のこと。
→ページデザインからコードにアクセスするための仕組み
書式が<%#  <バインド式>  %>
※この両部分のカッコをデリミタという。

Eval or Bind (コントロールのDataBind()またはPageクラスが呼ばれたときに解決される。
Eval = ReadOnly, Bind = RW ok みたいなもの。

DataBindメソッドを発行するだけで、DataGridコントロールが内部でループ処理をしてくれます。

★ちなみにこれに関数を入れることもできます。

Public Function getHeaader() As String
End Function
<HeaderTemplate>社員ID,アンケート実施日時,<%#getHeaader()%>
↑ヘッダテンプレート内に記述
ただしfunctionじゃないとだめとおもう(値を返す)

<%# FormatForXML(DataBinder.Eval(Container.DataItem, "Title")) %>
※FormatForXMLはstring引数1のオリジナル関数

【デバッグ】
System.Diagnostics.Debug.Write()
System.Diagnostics.Debug.WriteLine()

2011年11月15日火曜日

DSOFramerの再インストール

dsoFramer.ocxの再インストール
以下をコマンドプロンプトで叩く。

インストール:
regsvr32 C:\dsoframer.ocx
アンインストール:
regsvr32 C:\dsoframer.ocx /u

要はレジスタとアンレジスタなんですが、ocxはファイルを削除してもレジストリに登録されているものは削除されないので、ファイル削除ではなくアンレジスタするようです。

WebGrabberのエラー

HTMLをPDFにするwebGrabberについてちょっと調べる機会がありました。

2009はwindows server向けぽいです。
スタンドアロンでも動きますし、vbスクリプトからも動くと。

で、サポートツールから使うため、IEエンジンで動かすための調査。
インストールしたら、IEEngineを使うのはまずWebGrabber IE Login Infomationを立ち上げて、
「ドメイン、このコンピュータのユーザ名、このコンピュータのパスワード」で登録。
さらにwindows\system32内にある
APWebGrb.ocx(多分これが一番重要)
APWebGrbNET.dll
APWebGrb.exe
にフルコントロール権限を付けます。
そしたら鬼のように出ていたWPRHandler.exeのハンドラのエラーが出なくなって正常になりました。

結局使わなかったけど。。。

2011年11月14日月曜日

Smarty Warning: Smarty error: unable to read resource エラー

なぜか時々出るSmartyのこのエラー

Warning: Smarty error: unable to read resource: "test.tpl" in C:\Apache2\php_libs\smarty\libs\Smarty.class.php on line xxxx

テンプレートを絶対パスで指定したら直った。

decimal型

DBワンポイント::decimal型

value DECIMAL(5,2)
この例で、5 (precision) は、値に対して格納される 10 進数の桁数を表わし、2 (scale) は、小数点に続いて格納される桁数を表わします。
したがって、この場合、value カラムに格納できる値の範囲は、-99.99 ~ 99.99 になります(MySQL では、正数の符号を格納する必要がないため、
このカラムには、実際には、999.99 までの数値を格納することができます)。

とのこと。
出てくる度に確認してる気がするorz

x80020101のため操作を完了できませんでした

IE6,IE7では,Ajaxで読み込まれるページのJavaScriptが
   <script type="text/javascript">
   <!--
       ~~
   //-->;
   </script>
のようにコメントアウトされていると,
「x80020101のため操作を完了できませんでした」のエラーが表示される。

ASP.NET 本日から翌月末の日付を求める方法

「本日から翌月末の日付」
Dim c As Date = New Date(Now.Year, Now.Month + 2, 1)
c.AddDays(-1)

Wacom ペンタブレット:差し直したときにうまくカーソルが動かない

Bamboo買ってからずっとこの現象に悩まされています。

私自身、ペンタブレットは頻繁に使うものではなく、時々遊びに使う程度なので、常時USB口を埋めるのもなんなので使うときにだけ差しています。
しかし差す度に、タッチは反応するのに、カーソルがうまく動かない。
プルプルするだけ。カシャカシャ動かしてもプルプルするだけ。
震えるペン先・・・
なんかかっこいいけどかっこ悪い。

で、そのたびにドライバを再インストールしてたんですが、馬鹿馬鹿しくなってもっとお手軽な対処法はないのかと探したら、以下の方法で解決できました。

スタートメニューから全てのプログラム→Bamboo→Bamboo設定ファイルユーティリティ
→ログインユーザの設定ファイルを削除

差すたびにこれをやらなければならないのも面倒なんですが。
ドライバ再インストールよりマシかと自分を納得させています。

2011年11月9日水曜日

SQL:まとめて置換

UPDATE theTable SET theField = REPLACE(theField, ' ', '')

SQL:NULL値を指定した値で置き換え表示

select ISNull(column, "this is NULL") from Table...

で、NULLを代替文字列で置き換え表示できる。

便利です。

SQL:CaseWhenの使い方

SQLのCase Whenについて
※いわゆるif文のようなもの

select (列名 as 列名) 
CASE
when 条件 then 返値
when 条件 then 返値(省略可)
else 返値(省略可)
END

便利です。

2011年11月8日火曜日

HTMLが真っ白になる

HTMLをブラウザで開いたときに真っ白になる現象。

metaタグのcharset=utf-8宣言と<title>タグの順番が前後していたせいでIEがちゃんとUTF-8と認識してくれなかった。

 正しい順番は
 <meta...>
 の次に
 <title>○○</title>

ただ、<title>タグに挟む文字によっては、やはり同じ現象が起こるらしい。
 「定」とか。なぜだろう?

 予防策として、保存時の文字コードとキャラクタセットをちゃんと統一すること。

 参考URL
 http://www.tagindex.com/kakolog/q2bbs/1601/1844.html


タグに挟む文字によっては、やはり同じ現象が起こるらしい。<br /> 「定」とか。なぜだろう?<br /> <br /> 予防策として、保存時の文字コードとキャラクタセットをちゃんと統一すること。<br /> <br /> 参考URL<br /> http://www.tagindex.com/kakolog/q2bbs/1601/1844.html

zip生成時、ツールによっては解凍できないzipが出来る

APIかなんかでzipを生成したとき、ツールによって解凍できないzipができてしまう

生成したいパスが、実行フォルダ/folder/配下だった場合、出力先を

addzip->"/folder/xxx.txt" ×ぶっぶー
addzip->"folder/xxx.txt" としなきゃいけない。

敗因はこの「/」ルートのスラッシュ。
だからツールによっては無理矢理c:\で解凍しようとしておかしなことになっていたようです。
わかってしまえばなんてことないのだが、注意しないとダメですね。

Flex:データグリッドでオンマウスしても選択状態にならない

Flexのデータグリッドで、マウスをオンしても色が反転してくれないという謎の現象に悩む。
どうやらuidというカラムを含んだテーブルから取得したデータで、uidにNULLがあるとそういう状態になるらしい。
でもオンクリック時にはちゃんと値が取れる。
データをinsertするときNULLを避けなきゃなぁとうなだれていたのだが真相を知ってびっくり。

カラム名を『uid』としてしまった場合、それが『ユニークキー』じゃないと、配列をarraycollectionにいれてDataGrid(リスト系UI?)に放り込んだ際に、マウスのカーソル通り背景が反転しない現象が出現するのだった。
こんなんわかんないッスよorz

発見したとき思わず両手を合わせて拝んだブログ
http://www.coltware.com/category/flex/flex_ui/

2011年11月7日月曜日

メールが送信されない

Return_pathを指定したら届いた。

CustomContorolで検証が呼び出されない

CustomControlの罠

CustomControlで入力が空の場合、Falseとするような検証作ってたつもりだったのにFalseにはならず悩んでいたら、仕様でした。

『入力コントロールが空の場合、検証関数は呼び出されず、そのまま検証が成功します。ユーザーが入力コントロールへの入力を省略しないようにする場合は、RequiredFieldValidator コントロールを使用します。』

そうですか。。。

2011年11月6日日曜日

VB.NET 省略可能な引数を持つ関数

Private Sub OptionalFunction _
(ByVal Name As String, Optional ByVal Value As String = "Default")
  Console.WriteLine("hogehoge", Name, Value)
End Sub
・Optionalキーワードを指定する場合、初期値を設定する必要がある。
・引数省略時には、初期値に設定した値が使用される。

window onloadの書き方

javascript window onloadでハマった。

window.onload = hogehogeFunction(); //これだとNG
window.onload = hogehogeFunction; //これだとOK?

こちらはOK(無名関数を使う。こちらのが正統ぽい)
window.onload = function(){
  hogehogeFunction();
}

今更聞けないjavascript idとnameの違い

id:重複不可
name:重複可能
getElementById:単数
getElementsByName:複数(カンマ区切りの配列になる)

2011年11月5日土曜日

ページの有効期限切れ対策

Windows ServerにてPHPのページの有効期限切れをなくす

c:\windows php.iniの中の
; session.cache_limiter = nocache
session.cache_limiter = none

とする。

2011年11月4日金曜日

ファイルアップロードが出来ない

<form name="form_name" id="form_name" method="" action="" enctype="multipart/form-data">

enctypeの記述がなかったorz

2011年11月3日木曜日

ImageMagick サーバ設定

画像が変換されない、変換されても画質が悪い、エラーが出る、など、ImageMagickのトラブル時にこの設定をサーバにすることで改善されることがあります。
なお、ここではサーバはWindows Server 2003を前提としますが、2008でもほとんど差はありません。

【注意】
サーバのセキュリティを緩めるような設定になりますので、自己責任で実行してください。

・IISの匿名認証の権限変更
PHPのimagick->thumbnailimage()などでEPS→JPEG変換(ベクターからラスターへの変換)を行う際、デフォルトでPHPに与えられている権限ではGhostscriptを正常に動かすことができず、画質が非常に悪くなってしまうため、下記の設定を行いPHPからGhostscriptへのアクセスを許可する。

1. IIS->default web site->匿名認証 をAdministrator権限に変更
2. Administratorのパスワードを入力

・ローカルセキュリティポリシーの割り当て
PHPからexec(convert……)という形でサーバ上のファイルを直接コマンドラインから操作する方法は、PHPでアップロードしたファイルに対しては無効。これはファイルの所有権に関係しているため、IISを介し生成したファイルに適切な所有権を与える必要がある。

管理ツール->ローカルセキュリティポリシー->ユーザー権利の割り当て->
ファイルとその他のオブジェクトの所有権の取得にIIS_WPGとIUSR_R3007を追加。
※Windows Server 2008の場合はIUSRとIIS_IUSRを追加。

2011年10月30日日曜日

ImageMagick:画質や画像のトラブル

  • 確認すること
  1. Ghostscript、GSviewは正常にインストールできているか。
  2. 環境変数PATHにbinへのパスを追加したか。
  3. 匿名認証、ローカルセキュリティポリシー等、ウェブサーバの各種権限は設定したか。(詳細は別記事)

  • EPSをJPEGに変換したらウェブで表示されなくなった
EPSの色空間はCMYKだがIEはRGBしか対応していないため、convertの際にオプションでRGBに変換するよう指定する。
-colorspaceオプションでRGBを指定すると使い物にならない程画質が落ちるので、-typeの-TrueColorオプションがおすすめ。それか-ColorSeparation。

  • EPSをJPEGに変換したら画像の色が変わった
EPSの色空間はCMYK、ウェブ用のJPEGはRGBのためある程度の差異は生じる。-modulateオプションなどで細かく対応するのが一番無難・・・なのかな?

ImageMagick:日本語が変換されない

ImageMagickをインストールするとき、オプションの『Use Windows TrueType fonts for Chinese, Japanese and Korean』にチェックを入れたかどうか確認。
このチェックを入れることで、Ghostscriptはシステムフォントディレクトリから対応するTrueTypeフォントを検索し、自動で設定します。
またはフォントディレクトリに該当のフォントが入っているか確認します。

ImageMagickをPHPで使う

  • ImageMagickをPHPで使う
  • PHP Imagickライブラリの追加
    入手したphp_imagick_nts.dll をPHPの extension_dir に配置
    例:c:/program files/PHP/ext にコピーする


  • php.iniを編集
    extension=php_imagick_nts.dllと追記


  • コンピュータを再起動する
    ※ウェブサーバの再起動だけでは反映されない場合がある


  • phpinfoからimagickが追加されていることを確認


    • コーディングに際しての注意点
    ・画像ファイルへのパスは相対だとうまく動かない
    ・書き込み先フォルダにIIS の匿名ユーザの書き込み権限が必要
    サーバOSのバージョンによってユーザが違うため注意
    server 2003・・・IIS_WPGとRPP3007\IUSR_RPP3007(コンピュータ名)
    server 2008・・・IUSR と IIS_IUSRS

    2011年10月29日土曜日

    ImageMagick , Ghostscript+GSview インストール

    • ImageMagickのインストール

    • 入手したImageMagick-6.5.8-2-Q16-windows-dll.exe をクリックして実行

    「Select Additional Tasks」のオプションで

    1. Create a desktop icon
    2. Add application directory to your system path
    3. Install development headers and libraries for C and C++
    4. Install PerlMagick for ActiveState Perl v5.10.1 build 1006
    5. Install ImageMagickObject OLE Control for VBscript, Visual Basic, and WSH

    にチェックを入れる。
    ただし下の3つはC, Perl, OLE用なので、不要な場合はチェックを外す。
    インストールの途中で「pm/pl関連のファイルが見つからない」といった内容のエラーが出る場合があるが無視してかまわない。(perlモジュール)

    • Redistributable Packageのインストール

    入手したVisual C++ 2008 Redistributable Packageをインストール。
    サーバ、IIS、OSのバージョンによって2005をインストールする必要があるかもしれないので注意。

    • Ghostscript + GSviewのインストール
    ※インストール前の注意
    古いバージョンのGhostscript, GSviewがインストールされている場合、必ずアンインストールを行ってから新しいバージョンをインストールすること。
    • Ghostscriptのインストール
    入手したGhostscript日本語化キットのgs871w32full-gpl.zipを、c:\tmpなどフォルダ名がアルファベットのみのフォルダに移動し解凍
    以下より作業フォルダはC:\tmpと仮定する

    C:\tmpのsetupgs.exeを実行
    項目を確認し、
    1. Install to directory :  C:\gs
    2. Add shortcuts to :  Ghostscript
    3. Use Windows TrueType fonts for Chinese, Japanese and Korean
    を設定する。
    上2つはデフォルトのままで、最後の項目には必ずチェックを入れること。
    日本語を表示する際、自動でシステムフォントディレクトリからTrueTypeフォントを探すようになる。
    インストール終了後、エクスプローラを閉じる。
    • GSviewのインストール
    c:\tmp 内の gsv49w32.exeを実行
    インストール言語はEnglishにし、Associate PDF [.pdf] files with GSviewのチェックを外し、インストール
    ※Adobe readerを既にインストール済みの場合で、pdfを開くアプリケーションがデフォルトでGSviewになってしまうため
    • 環境変数の設定
    コントロールパネルのシステム -> 詳細シート(詳細設定) -> 環境変数でシステム環境変数 PATH への追加記述を行う。
    PATHにc:\gs\gs8.71\bin;c:\gs\gs8.71\libを追加
    ※バージョンはインストールしたGhostscriptによって変えること。

    参考ページ:http://auemath.aichi-edu.ac.jp/~khotta/ghost/install.txt 
    元URL:http://auemath.aichi-edu.ac.jp/~khotta/ghost/index.html

    ImageMagickを使うための準備

    • (自分の)動作環境

    OS : Windows Server 2003 R2 Standard Edition
    ウェブサーバ : IIS 6.0
    PHP : version 5.3.1

    OS : Windows Server 2008 Enterprise
    ウェブサーバ : IIS 7.0
    PHP : version 5.3.0

    • ImageMagickインストーラのダウンロード

    http://www.imagemagick.org/
    よりバイナリーパッケージのImageMagickをダウンロード。
    ページURL:http://www.imagemagick.org/www/binary-releases.html
    このページ下部の「Windows Binary Release」よりImageMagick-6.5.8-2-Q16-windows-dll.exeを入手
    ※バージョンはインストール当時のもの

    • Visual C++ 2008 Redistributable Packageのダウンロード

    バイナリーリリースページの下部にあるリンクからMicrosoftのウェブサイトに移動し、Microsoft Visual C++ 2008 SP1 Redistributable Package (x86)をダウンロード

    • Ghostscript + GSviewのダウンロード

    http://auemath.aichi-edu.ac.jp/~khotta/ghost/index.html
    より日本語版のGhostscript + GSviewをダウンロード。
    ※WindowsではこれらをインストールしないとEPSファイルの変換が正常に機能しない。

    • PHP Imagickライブラリのダウンロード

    http://valokuva.org/magick/よりphp_imagick_nts.dllをダウンロード。
    ただしphpがthread safeならphp_imagick_ns.dllをダウンロードする。
    私の場合はNTS。

    ImageMagick 序文

    ImageMagickを組み込んだ業務アプリケーションの開発。

    ImageMagick とは、画像の操作・表示・フォーマット変換のためのソフトウェアスイート。
    GIF、JPEG、PNG、PDF、EPS、TIFFなど100種類以上の画像ファイルフォーマットに対応している。
    私の場合は主に以下の用途で使った。
    ・EPS、BMPデータをWeb用のJPEGに変換。特にEPS画像。
    ・画像のサムネイル作成(GIF, JPEG)
    ・その他画像の色加工

    実装はコマンドとPHPのライブラリの両方を使用した。
    コマンドはPHPのexec関数で呼び出している。

    出来ることも多いが苦労も多かった。
    単純な変換ならさほど迷わずに済むけれども、今回はeps→jpg変換が主で、その時ああだこうだと質を要求されまくったので面倒だった。

    せっかくなのでTIPSでもまとめます。

    2011年10月27日木曜日

    ActivePDFで文字が表示されない

    ActivePDFでPDFに変換した際に文字が表示されない。

    ACtivePDFにデフォルトで入ってない日本語フォント(しかもTTF型式)のフォントをプログラム内で指定していたため。
    C:\WINDOWS\FONTSから不足フォント(私の場合はMSgothic.TTF)をコピー。
    勝手にインストールしてくれる。

    よく考えてみれば当たり前のことでした。

    IISの画像キャッシュをオフにする

    IISの画像のキャッシュを無効にする

    画像フォルダのプロパティ
    →ヘッダ
    cache-control:no-cache
    pragma:no-cache
    expires:0

    を指定。

    apache httpd.confのチェック

    apachectl configtestでhttpd.confの文法が確認できる。

    formのページ遷移でGET値が欠落する

    formでページ遷移したときに?以降が欠落する
    →htmlのformタグ内に使ってもいないのにnamdとidを振っていたのが原因。

    2011年10月24日月曜日

    IISのセッションタイムアウト設定

    IISのセッションタイムアウトの設定

    ・アプリケーションのセッションタイムアウトを設定する
    1. 管理ツールから「インターネット インフォメーションサービス(IIS)マネージャ」を開く
    2. コンピュータ名→Webサイト→規定のWebサイト→(アプリケーション名)を右クリックし、プロパティを開く
    3. ASP.NETタブのEdit Configuration...をクリック
    4. State ManagementタブのSettion timoutの値を分単位で設定する
    5. OKをクリック
    6. OKをクリック

    ・IISのアイドルタイムアウトの設定をする
    1. 管理ツールから「インターネット インフォメーション サービス(IIS)マネージャ」を開く
    2. コンピュータ名→アプリケーション プールを右クリックし、プロパティを開く
    3. パフォーマンスタブのアイドル タイムアウトをセッションタイムアウトと同じ値に設定
    4. OKをクリック

    これで設定できます。

    Call to undefined function dl()

    PHP4のアプリケーションPHP5.3に移行していた際に躓いたこと。

    こういう感じで普通に拡張モジュールをプログラムでロード。
    今回はかの有名な全文検索モジュールnamazuだったわけですが。

    if ( ! extension_loaded('namazu')) {
            if ( ! dl('namazu.so')) {
                    abort( "なまずは泳げませんでした");
            }
     }
    

    いざ実行してみると、 Fatal error: Call to undefined function dl() in... とdlの部分でげに恐ろしきFatal errorになる。
    PHP公式マニュアルには『この関数は、PHP 5.3 以降でいくつかの SAPI からは削除されました。』とあるものの、普通のCGI版だし5.3.6だし動くはず・・・と小一時間悩む。
    だいたいいくつかのSAPIって何が該当するのかもわからない。
    configureも'--disable-debug'等余計なことはやってない。(enableでもなかったが)

    で、結局下記の方法で解決。

    • php.iniのenable_dlをOffからOnに
    enable_dl = On

    • dlで実際に呼んでいるモジュール(今回はnamazu.so)をphp.iniに追加
    extension=namazu.so
    ※extディレクトリにはnamazu.soをいれておくこと。
    php.iniでsoのフルパス指定でもおそらくOK。

    なんと通ったよ!!やったー!やったよーー!!
    ナマズが泳いだよー!!!

    それにしてもdlで呼んでいるものをいちいち指定しなければならないのだろうか。謎。

    2011年10月23日日曜日

    子ウィンドウを閉じながら親ウィンドウにsubmitする

    1. window.openで子を開くときに、親ウィンドウに名前をつけておく
    function window_naming(){
      window.name = "searchWin";
    }

    <a>タグの例:
    <a href="#" onClick="window_naming();window.open('child_page.php?');return false;">子ページ</a>

    2. 子ページでsubmitの際にターゲットを親に指定
    function form_submit(){
      document.forms[0].action = "parent_page.php"; /* submit先指定 */
      document.forms[0].target = "searchWin"; /* ターゲット(この場合親)指定 */
      window.close(); /* ウィンドウを閉じる */
      document.forms[0].submit(); /* 送信! */
    }
    

    vbのstrConv非対応文字列

    vbのstrConvはダブルクオーテーション、シングルクォーテーション、¥マークに非対応。

    ・strTarget = strTarget.Replace("\", "¥")
    ・strTarget = strTarget.Replace("'", "’")
    ・strTarget = strTarget.Replace("""", Chr(&H814A))

    で対応しました。

    正確には、「\」は「\」、 「"」は「"」、「'」は「'」になるだけなんですけどorz


    SQLServerとOLEDBの型

    ASP.NET&SQL ServerのアプリケーションをMSDEに移行したときのメモ。

    とある関数内で、DBから値を取得して、その型がintのときは別の処理にする、という分岐がうまく動かず悩む。

    【原因】
    SQLServerでは「int」だったのがOLEDBでは「DBTYPE_I4(オートナンバー)」になるから。

    危険な可能性のある Request.QueryString 値の対処法

    危険な可能性のある Request.QueryString 値がクライアント (em="...トの検証は、構成の <pages enableEventVa...") から検出されました。
    の対処法。


    ASP.NET上で自動的にユーザ入力値のエラーチェックをしているらしく(validateRequest)1.1のmachine.configにそれを一括設定する項目はありましたが、2.0にはありませんでした。
    (見落としているのでしょうか?)
    もしこれを実現しようとすれば、全てのaspxページの@Page ディレクティブにvalidateRequest="False"と記述するしかないかと思いきや、

    web.config の次の部分
    <pages>

    <pages enableEventValidation="true" validateRequest="false">
    とすることで解決。

    ※古いメモから起こしたので正確性には自信なしです。

    UACを無効にする

    1. スタートボタンから[コントロールパネル]を開く
    2. [コントロールパネル]のホームが表示された場合、左ペインで[クラシック表示]を選択する 
    3. [ユーザアカウント]アイコンをダブルクリックする 
    4. [ユーザーアカウント制御の有効化または無効化]を選択する 
    5. [ユーザーアカウント制御]ダイアログが表示されたら、[続行]ボタンをクリック(管理者アカウントの場合)
      または管理者アカウントのパスワードを入力して[OK]ボタンをクリック(標準アカウントの場合)する 
    6. [ユーザーアカウント制御 (UAC) を使ってコンピュータの保護に役立たせる]オプションのチェックを外し、[OK]ボタンをクリックする


    DSOFramerのエラー

    Windows VistaでDSOFramerがうまく動かないときに試してみること。

    • アンインストール→インストールをバッチで行う
    regsvr32 C:\dsoframer.ocx /u
    regsvr32 C:\dsoframer.ocx

    上記を記述したコマンドを実行のバッチファイルを作成し、これをエクスプローラ上で右クリックして「管理者として実行」を行うことでアンインストール・インストールすることが可能。
    このとき、dsoframer.ocx のパスはフルパスで指定しておくこと。
    • UACを切ってインストール
    UACを切って管理者権限でログインし、インストールする。可能であればインストール後にDSOFramerを実行する制限ユーザを作成する、または新しく制限ユーザを作成する。 
    • IEを「管理者として実行する」で起動し試す
    そのまんま。
    • Activeスクリプトの有効化
    IEの「インターネットオプション」内、「セキュリティ」タブ→「ローカル イントラネット」アイコンをクリックして、表示される「サイト」->「詳細設定」
    このセキュリティURLリストに、当該サイトのURLを追加
    • ユーザの追加
    コンピューターの管理 → ローカルユーザーとグループ → グループ → Administratorsのプロパティ → 該当ユーザーを追加してみる
    •  イベントビューアのログ
    ウィルスバスター等のセキュリティソフトで制限されていないか

    色々書きましたが、どれも決め手に欠けます。色々やってるうちに動いた記憶があります、
    というかDSOFramer自体あまり使いやすいものではないという説も。

    2011年10月16日日曜日

    sample

    aaaa

    function hogehoge{
      $R = opennmz(path);
      $n = nmzcount($R);
    }
    hogehoge;