四月 15

使用 IE 7 進入 VirtueMart 1.1.3 的後台管理介面編修商品時

會發生"操作已終止"的情況,這是 IE 的問題,微軟的本身也說明了這個問題

.

為什麼我收到下列錯誤訊息當我造訪 Internet Explorer 中的網頁?

Internet Explorer 無法開啟網際網路網站 http://<Web site>.com. 作業已中止。

答案 : Internet Explorer 7 無法顯示特定的項目,以在該網站 Web 網頁上。

我如何做修正這個問題?

要修正這個問題,最簡單的方法是升級至 Internet Explorer 8。 這個問題不再發生在 Internet Explorer 8 中。 若要升級此項為 Internet Explorer 8,請造訪下列 Microsoft 網站 (英文): Windows Internet Explorer 8: 首頁
http://www.microsoft.com/windows/internet-explorer/beta/default.aspx

.

官方說只要裝 IE8 就能解決此問題。但如果不想裝 IE8 呢?

很簡單,只要下載這個檔案,解壓縮後蓋過下列檔案

Root/administrator/components/com_virtuemart/toolbar.html.php
Root/administrator/components/com_virtuemart/classes/htmlTools.class.php
Root/administrator/components/com_virtuemart/classes/menuBar.class.php
Root/administrator/components/com_virtuemart/classes/ps_config.php
Root/administrator/components/com_virtuemart/html/product.product_form.php

Root/components/com_virtuemart/js/wz_tooltip.js
Root/components/com_virtuemart/js/slimbox/css/slimbox.css
Root/components/com_virtuemart/js/slimbox/js/slimbox.js

最後記得把 IE 裡的快取檔案清空,重新進入。問題就解決了

參考資料:

Fix for Internet Explorer (IE7) Operation Aborted issue.





四月 14

如果你的 VirtueMart 是 1.1.3 的版本,那就可能會有這個問題

就是如果你的分類有2~3層,而每層又有數個分類

那麼你就會發現,該層的其中幾個不能調上下順序(見圖)

.

一開始使用 VirtueMart 討論區的 code 來修正,結果還是一樣

花了一點時間研究一下,改了一些 code 就 OK 了

首先,先下載這個檔案

然後放到 administrator/components/com_virtuemart/html 蓋過舊檔(請視需要先備份舊檔)

這樣子就OK了

.

參考資料:http://forum.virtuemart.net/index.php?topic=33720.0





四月 13

通常我們要更改 SQL Server 資料表中的欄位屬性時

直接使用 SQL Server Management Studio 進去調整就行了

但是今天同事碰到一個問題,就是當改完屬性(大小)要存檔時,會發生連線逾時的情況

個人猜測是裡面的資料量很多,而你修改欄位的屬性(大小)時

SQL Server 會每一筆都去看一次,而造成連線逾時

解決的方法就是使用下 SQL 指令的方式去修改

語法如下


alter table table_name alter column col_name col_type

--範例。把"採購明細檔"裡的"品名"改為 nvarchar(50)

alter table 採購明細檔 alter column 品名 nvarchar(50)

--範例。把"採購明細檔"裡的"備註"改為 ntext

alter table 採購明細檔 alter column 備註 ntext

加大欄位的大小是沒問題的

但如果要縮小欄位請注意是否當前的資料是否小於你要調整的大小

如果現有的欄位資料大於你要調整的大小會發生以下情況,指令不會被執行

訊息 8152,層級 16,狀態 13,行 1
字串或二進位資料會被截斷。

陳述式已經結束。





四月 10

系統環境為,如果有所出入請自行判斷要修改的地方
Linux Debian 5.0
Apache 2
PHP5
Perl

要完成這個目標必先要裝 PHP APC 這個外掛

怎麼安裝呢?當然是使用無人不知,無人不曉 apt

懶人包已經準備好了,請服用

#! /bin/sh
apt-get -y install apache2-threaded-dev php5-dev php-pear perl
pecl install apc
echo "extension = apc.so" > /etc/php5/conf.d/apc.ini
echo "apc.stat=0" >> /etc/php5/conf.d/apc.ini
echo "apc.enabled=1" >> /etc/php5/conf.d/apc.ini
echo ";apc.shm_size=快取大小,單位:MB" >> /etc/php5/conf.d/apc.ini
echo "apc.shm_size=64" >> /etc/php5/conf.d/apc.ini
echo "apc.ttl=300" >> /etc/php5/conf.d/apc.ini
echo "apc.user_ttl=300" >> /etc/php5/conf.d/apc.ini
echo "apc.num_files_hint=1024" >> /etc/php5/conf.d/apc.ini
echo "apc.mmap_file_mask=/var/tmp/apc.XXXXXX" >> /etc/php5/conf.d/apc.ini
echo "apc.include_once_override = 1" >> /etc/php5/conf.d/apc.ini
echo "apc.enable_cli=1" >> /etc/php5/conf.d/apc.ini
cp /usr/share/php/apc.php /var/www
chown www-data /var/www/apc.php
chgrp www-data /var/www/apc.php
chmod 755 /var/www/apc.php
perl -i -pe "s/\'ADMIN_USERNAME\',\'apc\'/\'ADMIN_USERNAME\',\'admin\'/g" /var/www/apc.php
perl -i -pe "s/\'ADMIN_PASSWORD\',\'password\'/\'ADMIN_PASSWORD\',\'admin123\'/g" /var/www/apc.php
/etc/init.d/apache2 restart

首先先以 root 登入系統

請把 code 存成 install_apc.sh

然後給予可執行的權限( chmod 755 install_apc.sh)

執行 ./ install_apc.sh

出現以下畫面時,按下 Enter

47 source files, building
running: phpize
Configuring for:
PHP Api Version: 20041225
Zend Module Api No: 20060613
Zend Extension Api No: 220060519
1. Use apxs to set compile flags (if using APC with Apache)? : yes

1-1, 'all', 'abort', or Enter to continue:

懶人包預設會把 APC 的管理頁面,copy 一份到 /var/www 如果有特殊需求請自已搬移

預設的 APC 管理帳號是 admin 密碼是 admin123

如果要修改請編輯 /var/www/apc.php (修改後記得重啟 apache2)

defaults('ADMIN_USERNAME','你要的帳號');
defaults('ADMIN_PASSWORD','你要的密碼');

經過測試的結果,真的是差非常多,快到一個不行

如果你發現修改了網頁,可是仍然是顯示舊的,這表是網頁仍在快取中

有2個方法可以解決

1.直接重啟apache2

2.進入APC的管理介面,登入帳密後,點選 Clear opcode Cache

參考資料

[FreeBSD] 安裝 PHP APC 加速網頁速度

PHP APC on Ubuntu 8.04 Hardy





四月 08

在以前如果要找出某個資料夾下的特定檔案可能要寫一大串指令

現在有了 LINQ 只能說是一整個輕鬆呀

利用 LINQ 類似 SQL 的指令方式,來取得特定的檔案名稱,就像是在下 SQL 一樣簡單

直接看程式碼比較快

        '取得目錄下所有的檔案名稱(String)
        Dim Dir As String = "C:\"
        Dim myFiles = From s In My.Computer.FileSystem.GetFiles(Dir)

        '要濾出來的副檔名
        Dim ImageExtension() As String = {".jpg", ".jpeg", ".bmp", ".png"}

        '先把檔案名稱轉成FileInfo
        Dim f As New List(Of FileInfo)
        For Each s As String In myFiles
            f.Add(My.Computer.FileSystem.GetFileInfo(s))
        Next

        '使用LINQ來取出我們要的資料(副檔名包含在ImageExtension()裡面的)
        Dim studno = From s In f Where ImageExtension.Contains(s.Extension.ToLower) Select s.Name, s.FullName

        '把找到的檔名顯示出來
        For Each sno In studno
            Debug.Print(sno.FullName)
        Next