四月 29

在 PHP 上有個 Crypt 函式是用來加密字串的

很多都用的到,例如:LDAP 上的密碼加密

那麼要如何在 .net 上實現這個函式呢

其實已經有人寫好,等我們去用了

A C# implementation of Unix crypt()

把原始檔案下載下來後是個 C# 的程式檔

先在 Visual Studio 中開一個新類別庫專案(C#),把檔案加入

然後就可以建成 dll 檔來使用了

本來有想說改成 VB.Net 的版本,不過轉換過後有些地方怪怪的就放棄了

這邊有打包好的版本,有興趣的可以下載回去研究





四月 27

如果你是使用 KMD 的 OSCommeric 在 PHP5 上執行會有一些小問題

在後台按下 "客戶/訂單" 會出現下面的訊息

Warning: array_merge() [function.array-merge]: Argument #1 is not an array in
/var/www/osc/admin/customers.php on line 763

Warning: array_merge() [function.array-merge]: Argument #2 is not an array in
/var/www/osc/admin/customers.php on line 765

Warning: reset() [function.reset]: Passed variable is not an array or object in
/var/www/osc/admin/includes/classes/object_info.php on line 17

Warning: Variable passed to each() is not an array or object in
/var/www/osc/admin/includes/classes/object_info.php on line 18

要解決此問題要修正2個檔案

在 admin/customers.php 中找到下面程式

line 7XX: $customer_info = array_merge($country, $info, $reviews);
line 7XX: $cInfo_array = array_merge($customers, $customer_info);

修改成

$customer_info = array_merge((array)$country, (array)$info, (array)$reviews);
$cInfo_array = array_merge((array)$customers, (array)$customer_info);

---------------------------------------------------------------------------------------
在 admin/includes/classes/object_info.php 中找到下面程式

class objectInfo {
// class constructor
function objectInfo($object_array) {
reset($object_array);
while (list($key, $value) = each($object_array)) {
$this->$key = tep_db_prepare_input($value);
}
}
}

修改成

class objectInfo {
    function objectInfo($object_array) {
        $object_array = is_array($object_array) ? $object_array : array($object_array);
        reset($object_array);
        while(list($key, $value) = each($object_array)) {
            $this->$key = tep_db_prepare_input($value);
        }
    }
}

這就子就解決了





四月 22

做個備忘,說明如何把GridView或其他WebControl輸出成html碼

以下文章轉錄自topcat姍舞之間的極度凝聚

如果我們想要在CodeFile中取得某控制項運作後將會送出的HTML內容可以透過以下的Function來處理。

    Public Function GetHTML(ByVal objWebControl As WebControl) As String
        Try
            '以 StringWriter 取得HTML
            Dim w As New System.IO.StringWriter
            Dim a As New HtmlTextWriter(w)

            objWebControl.RenderControl(a)
            Return w.ToString

        Catch ex As Exception
            Throw

        End Try
    End Function



    Public Function GetHTML(ByVal objHtmlControl As HtmlControl) As String
        Try
            '以 StringWriter 取得HTML
            Dim w As New System.IO.StringWriter
            Dim a As New HtmlTextWriter(w)

            objHtmlControl.RenderControl(a)
            Return w.ToString

        Catch ex As Exception
            Throw
        End Try
    End Function

如果想在CodeFile中取得GridView結果的HTML內容,首先會遇到這樣的錯誤訊息:

型別 'GridView' 的控制項 'GridView1' 必須置於有 runat=server 的表單標記之中。

這個問題,可以在您的CodeFile中加入以下這段來解決

    Public Overrides Sub VerifyRenderingInServerForm(ByVal control As Control)
        '處理'GridView' 的控制項 'GridView' 必須置於有 runat=server 的表單標記之中
    End Sub

如果您的GridView沒有設定分頁,應該就可以正常的執行了。但是如果有設定分頁,很快的又遇到了另外一個問題!出現以下的錯誤訊息:

RegisterForEventValidation 只能在 Render(); 期間呼叫

這個問題,可以設定aspx原始檔中<%Page%>的以下兩個設定解決

EnableEventValidation = "false" AutoEventWireup="true"

參考資料:
解決GridView使用RenderControl取得HTML出現的問題
在CodeFile中取得控制項將輸出Clinet端的HTML內容
使用 BasePage 來解決 GridView 執行 RenderControl 產生的錯誤





四月 21

WordPress 預設是不支援放入 iframe 的

要可以插入 iframe 必需先裝一個外掛,外掛的名字是 Embed Iframe

你可以選擇用上傳壓縮檔或是直接用網頁的方式安裝

外掛安裝好,使用方式為在發表的內容中加入下面這行樣版

[iframe 網址 寬 高]

例如本站的即時匯率就是使用 iframe 來完成的





四月 20

最近有個需求,就是固定時間內把某個資料夾內的檔案(不含子資料夾),壓縮成1個自解檔

而這個自解檔於執行時必需自動將檔案解壓到特定目錄,解壓完成後自動執行某個檔案

看起來似乎很複雜,不過事實上流程簡化後只有2個步驟

1.把檔案加入壓縮檔,並且引入解壓縮的參數
2.於 Windows 內的排程執行此指令

關於第2步驟 google 找一下就一堆教學了,在此不再贅述

第一步驟則是比較麻煩一點

首先,先建立一個檔案名為 config.txt 的文字檔,內容如下

Path=C:\Test_Dir
Title=測試自動解壓縮
Overwrite=1
Silent=2
Setup=setup.exe

這個檔為 WinRAR 要自動解壓縮時的參數檔

上面這些參數的意思代表

1.按下自解檔時,不詢問,自動執行解壓縮 (Silent=2)
2.要把檔案解壓縮到 C:\Test_Dir 這個目錄 (Path=C:\Test_Dir)
3.如果檔案存在就蓋過去 (Overwrite=1)
4.解壓縮完後自動執行 setup.exe (Setup=setup.exe)

接下來是使用指令模式來建立 WinRAR 的自解檔

先建立檔名為 run.bat 的批次檔,內容為

del "C:\out.exe"
path=%path%"C:\Program Files\WinRAR\";
winrar a -m2 -sfx -ibck -ep -zC:\config.txt "C:\out.exe" "C:\Target_Dir"

上面的意思表示

1.建立前先把舊的檔案刪除,如果沒刪除會一直累加進去壓縮檔 (del "C:\out.exe")
2.把 Winrar 的路徑加入 Path 以便使用 (path=%path%"C:\Program Files\WinRAR\";)
3.使用建立自動解壓縮檔的模式 (-sfx)
4.壓縮率設為一般 (-m2)
5.去掉檔案的完整路徑 (-ep)
6.於背景中壓縮檔案 (-ibck)
7.把解壓縮時的參數檔引入 (-zC:\config.txt)
8.壓縮檔完成時的存放位置 ("C:\out.exe")
9.要壓縮的檔案位置 ("C:\Target_Dir")

P.s 如果想要壓縮目標要包含子資料夾請加上一個參數 -r 就行了

接下來把 run.bat 放到 Windows 排程中執行就可以了

如果大家對參數檔有興趣,可以使用 WinRAR 的"參數產生器"來玩玩

先隨便找個檔案加入壓縮檔,接下來就看圖說故事

.

最後產生出來的參數會放在註解裡面