2016年8月3日 星期三

在IIS上安裝與設定PHP

開發環境主要是M$系列,因為測試的緣故,
需要使用其他人所提供的PHP程式,面臨三個選擇:
1、安裝Apache
      跟IIS會有相容性的問題,雖然網路上解法不少,因為熟悉度的關係,跳過。
2、把php改寫成asp,再掛載到iis上
      後續維護可能會有困擾,跳過。
3、直接在IIS上附掛php
      多年前曾經用過,雖然當時只是見習生路過的,就選這個方案好了。


參考了這篇【在在 IIS 上安裝與設定 PHP】 的說明,依序

1、下載PHP  (http://windows.php.net/download#php-5.6)  選擇的是5.6 X64 Thread Safe版本

2、將步驟1下載的zip檔解壓縮至C:\php

3、將c:\php\php.ini-production copy為php.ini並作下列修改 (有些設定原先為註解,拿掉;即可)
  • extension_dir = "ext"
  • cgi.force_redirect = 0
  • cgi.fix_pathinfo=1
  • fastcgi.impersonate = 1
  • 找到date區塊,date.timezone = "Asia/Taipei"
  • 找到Windows擴展區塊,開啟所需的相關dll (取消註解),例如: extension=php_mbstring.dll extension=php_mysql.dll .. ..

4、設定IIS
   
     (1)打開【處理常式對應】並新增PHP CGI模組
         要求路徑 = *.php
         模組         = FastCgiModule  (下拉選單)
         執行檔     = c:\php\php-cgi.exe
         名稱         = PHP via FastCGI     (為了省事直接依原作者的方式命名)

5、測試php可否正常執行
      在iis網頁目錄新增一個index.php,內容如下:
      <?php
            phpinfo();
        ?>    


後記,

原本是打算直接列出參考文章稍做記錄就好,在REVIEW時才發現,
可能手腦不協調吧~"~
一開始下載的版本(VC11 x86 Non Thread Safe (2016-Jul-21 19:18:58)),並不是我原先想下載的版本(VC11 x64 Thread Safe (2016-Jul-21 19:19:13)).........

甚至在抱著piece of cake的心態下快速設定完成後,直接把要測試的php程式搬到iis目錄下,咦.......這支在原作業環境運作良好的程式為什麼到我手上會水土不服!?
把程式碼註解掉之後,php確實可以檢視了,但....我不是只想顯示網頁文字啊,

原來,問題出在php的資源配置上,也就是在我設定的測試環境中(php.ini),有幾項該程式使用到資源未啟用,例如:
1、原先的作業環境允許使用<? ?>簡單的標識格式,但測試環境(php.ini)未開啟short_open_tag,所以要嘛是改php.ini,不然就把程式的<? ?> 改為<?php ?>。
2、Windows擴展區塊當中,只要程式有使用到的相關dll都要開啟 (extension=xxxxx.dll)。

詳細的php配置可以參考php.ini參數中文說明

方便日後追查,還是把重要步驟記下來好了。




2016年7月4日 星期一

[學習筆記]-AngularJS


AngularJs javascript framework is used in Single Page Application  projects which extends HTML DOM with additional attributes and makes it more responsive to user action.


  • open-source web application framework
  • fully extensible client-side MVC/MVVM framework
  • no library dependencis, works well with other libraries
  • perfect for creating one-page web apps 
  • “superheroic JavaScript MVW framework for dynamic web apps”
  • The main goal of this structural framework is to augment web apps with MVC (Model-View-Controller) capability

找到幾個很棒的學習網站,可以來慢慢消化了...

2016年7月1日 星期五

'Microsoft.Jet.OLEDB' 不支援64bits環境的替代方案。

原先跑的很順的網站轉移作業系統環境到Windows Server 2012,出現錯誤訊息
「'Microsoft.Jet.OLEDB.4.0' 提供者並未登錄於本機電腦上。」才注意到這個每次處理每次忘記已經存在很久的問題..........

替代方案:「Microsoft Access Database Engine 2010 可轉散發套件 

註:雖然網頁上未將Windows Server 2012列在支援的作業系統,但以這個範例而言是可以正常執行的。(就算不能執行,目前好像也找不到其他更新的版本...)

以輸出檔名為"output.xls"的excel檔為例,相關設定說明如下:

ConnectionString="Provider=Microsoft.ACE.OLEDB.12.0;Data Source=output.xls;Extended Properties='Excel 12.0 Xml;HDR=Yes'";
  • Provider 引數設定為 "Microsoft.ACE.OLEDB.12.0"
  • DataSource引數設定為輸出檔名
  • HDR引數設定為Yes 代表第一行是標題,設定為No代表第一行是資料
  • Extended Properties則可依需求參照下表設定

檔案類型 (副檔名)延伸屬性
Excel 97-2003 活頁簿 (.xls) "Excel 8.0"
Excel 2007-2010 活頁簿 (.xlsx)"Excel 12.0 Xml"
Excel 2007-2010 具有巨集功能的活頁簿 (.xlsm) "Excel 12.0 Macro"
Excel 2007-2010 非 XML 的二進位活頁簿 (.xlsb)"Excel 12.0"

2016年5月31日 星期二

NSDictionary排序實作

原先按照以往的開發習慣(C#)將一些設定寫入NSDictionary,取值時才注意到原來NSDictionary是沒有排序的...

stackoverflow真是開發人員的好朋友,

參考到這篇Sorting NSArray of dictionaries by value of a key in the dictionaries

才發現又犯了老毛病用C#再看待iOS專案...

在iOS Developer Library中,有一個專門講述排序的主題<<Sort Descriptor Programming Topics>>

還想進一步鑽研的話,還有一篇Key-Value Coding Programming Guide

----
NSDictionary排序實作如下:

2016年5月30日 星期一

storyboard中的控制項無法連結至.h標頭檔

說來奇妙,這是很簡單的動作,但是每當久久一次...再度維護ios專案時...總是會卡在這個問題上,除了接觸時間不多QQ...也可以說是深植在潛意識的結果,

幾年前興沖沖的參加某個iphone/ipad app開發專班時,當時講師就在課堂上為了這個問題卡了許久...其實我並不怪講師學藝不精...真要說起來這個講師應該是倒楣+準備不足+藝高人膽大,該課程期間正逢xcode改版新增了分鏡表(Storyboard),但是開課單位提供的卻是改版前沒有storyboard的教材,一會兒控制項設定視窗跳不出來、一會兒範例上使用的方法不適用storyboard或是方法已停用...,
聽得台下一頭霧水,當時一同上課的同事就很性格的在整個課程期間專心研讀自己準備的參考書....
雖說xcode許多設計是很直覺,但在長期使用Visual Studio的習慣制約下,這種直覺,剛開始接觸時我很難理解,後來參考同事的作法,買了 一本圖文並茂的參考書,在課後找時間實作才稍微進入狀況,可能是當時的印象太深刻了吧,每當開啟storyboard時,就會開始想會不會設定視窗跳不出來....

整理這篇,是為了打開這個深埋在潛意識中會造成卡關的結,應該很少人會在這種細節上卡關吧...

一、如何連結控制項至.h標頭檔?
   Step1、在控制項上按著滑鼠右鍵拖拉到.h標頭檔。
                (或是按滑鼠左鍵+control鍵)
   Step2、正常情況下,在Step1後會出現"Insert outlet or outlet collection"的提示文字,放開滑鼠鍵、control鍵後會跳出設定用的交談視窗,輸入相關設定後連結完成。


2016年5月25日 星期三

App Transport Security

開發環境更新至iOS 9之後,原先正常運作的App資料跑不出來了,這個有一搭沒一搭始終無法投注太多心力的App...,一發生狀況,最為難的情況就是不常維護整個環境生疏了, 光是找到這個錯誤訊息就花費不少時間...

 kCFErrorDomainCFNetwork Code=-1022 "The resource could not be loaded because the App Transport Security policy requires the use of a secure connection." 

一查詢原來iOS 9針對資料傳輸新增了控管機制 App Transport Security (ATS):

 App Transport Security (ATS) enforces best practices in the secure connections between an app and its back end. ATS prevents accidental disclosure, provides secure default behavior, and is easy to adopt; it is also on by default in iOS 9 and OS X v10.11. You should adopt ATS as soon as possible, regardless of whether you’re creating a new app or updating an existing one. If you’re developing a new app, you should use HTTPS exclusively. If you have an existing app, you should use HTTPS as much as you can right now, and create a plan for migrating the rest of your app as soon as possible. In addition, your communication through higher-level APIs needs to be encrypted using TLS version 1.2 with forward secrecy. If you try to make a connection that doesn't follow this requirement, an error is thrown. If your app needs to make a request to an insecure domain, you have to specify this domain in your app's Info.plist file. 
 資料來源:What's New in iOS (9.0)


怎麼解決呢?

2016年5月18日 星期三

當 IDENTITY_INSERT 設為 OFF 時,無法將外顯值插入資料表 'TableName' 的識別欄位中

使用識別欄位(通常是自動編號)的資料表複製移動時,
出現當IDENTITY_INSERT 設為 OFF 時,無法將外顯值插入資料表 'TableName' 的識別欄位中

參照MSDN: SET IDENTITY_INSERT (Transact-SQL)

SET IDENTITY_INSERT [ database_name . [ schema_name ] . ] table { ON | OFF }

於Insert Into 前先執行
SET IDENTITY_INSERT TableName On;


結果出現另一個錯誤訊息:位於資料表 TableName 的識別欄位其外顯值只有當使用了資料行清單且 IDENTITY_INSERT 為 ON 時才能指定。


2016年5月10日 星期二

找不到型別或命名空間名稱

今天遇到了如同怪異的「找不到型別或命名空間名稱」錯誤這篇所提到的情況,整個就是很怪異,原先正常運作的專案,突然冒出這個錯誤,檢查了老半天,也確定<Type/Namespace>有正常載入,在耗費大半天之後,終於發現...原來我安裝的CrystalReportFor Vs更改了web.config檔--註解了部份原始設定,另外再加上新設定(也有可能是自己手殘誤觸註解鈕),把web.config檔中,位於assemblies數個重要的assembly給註解掉了.......囧,
如果遇到了這個錯誤,又查不到原因,不妨檢查一下設定檔....


2016年5月3日 星期二

ASP.NET Web Form-偵測用戶端瀏覽器類型與支援的功能

其實,進入HTML5的時代有那麼多響應式網頁設計的模組可以使用,只要設計得當,前端界面應該不太需要做特殊判斷,至於後端...總會有些奇奇怪怪的情況來考驗,雖然困擾了幾天,最後這些資料沒派上用場XDDD

不過資料都收集了,就稍加整理做為這次被考驗的紀念...

-----------------------------------這是分隔線-----------------------------------

偵測用戶端瀏覽器屬性在前端可以用javascript達成,例如:

alert(navigator.userAgent);

有時必須在後端做判斷,(ASP.NET WebForm)可以取 Requset.UserAgent的值,
更細節的支援功能則可使用HttpRequest.Browser

How to: Detect Browser Types and Browser Capabilities in ASP.NET Web Forms

必須注意的是HttpBrowserCapabilities 提供的是用戶端瀏覽器所支援的功能,而不是用戶端瀏覽器的設定值。

想要將用戶端瀏覽器支援的功能呈現在網頁上,MSDN提供的範例是:

2016年5月1日 星期日

Microsoft SQL Server, 錯誤: 18456

通常是在執行SQL Server連線時才有機會看到18456這個錯誤訊息,這跟SQL Server授權驗證有關,也就是說看到這個訊息代表的是連線失敗。

SQL Server 的登入驗證方式有2種:[Windows驗證]以及[SQL Server驗證]。

1.Windows驗證:使用Windows本機端使用者帳戶登入SQL Server。
選擇這個驗證方式,並且看到錯誤:18456時,有可能是安裝SQL Server的過程中未將該帳戶加入存取權限,或是新建的使用者帳戶。因此,在能連線到SQL Server的狀況下,到SQL Server\安全性\登入中,加上該本機端使用者帳戶即可。
詳細設定可參考這篇:
以 Windows 驗證方式登入 SQL Server 時,遇到錯誤代碼為 18456 的錯誤,該如何排除?

2.SQL Server驗證:使用SQL Server帳號登入。
選擇這個驗證方式,在排除帳號、密碼輸入錯誤的情況下看到錯誤: 18456,絕對不是人品不佳,而是沒有開放SQL Server驗證模式。
怎麼開放呢?  開啟[伺服器屬性]->選取頁面[安全性],將驗證模式異動為"SQL Server 及 Windows 驗證模式"。
設定完成後,須重新啟動SQL Server服務(不是把Management Studio關掉重開喔)。



2016年4月28日 星期四

HTTP錯誤500.21-Internal Server Error


執行ASP.NET應用程式出現「HTTP錯誤500.21-Internal Server Error,處理常式 "PageHandlerFactory-Integrated" 的模組清單中有錯誤的模組 "ManagedPipelineHandler



會發生此狀況的原因為:
一、先安裝.NET FrameWork 4.0以上的獨立安裝程式,才啟用IIS角色,可能就會遇到。
Q:我沒裝什麼.net framework的獨立安裝程式啊..?
A:可能是在安裝其他應用程式時,順便幫你安裝了。
二、.NET Framework 4.0 與ASP.NET 有關的設定損壞走鐘了。

解決方案:
底下這篇是MSDN的說明,適用在VS2012安裝較VS2010或SQL SERVER2008早的情況
Troubleshooting: HTTP Error 500 (or 500.21) - Internal Server Error Handler


底下這篇可能適用於某些環境
執行ASP.NET應用程式時,發生【HTTP錯誤500.21-Internal Server Error,處理常式 "PageHandlerFactory-Integrated" 的模組清單中有錯誤的模組 "ManagedPipelineHandler"】錯誤的故障排除


雖然MSDN的說明,是Visual Studio2012比較早安裝;但是長期使用微軟開發工具早已養成要按照發行版本的先後順序進行安裝的習慣,我的安裝順序是VS2010 -> VS2013 -> VS2015,會遇到這個錯誤的原因是開始coding後才想到要啟用IIS角色....
實際的解決方式是:

1. 進入命令列模式(執行cmd)
2. 切換至  %systemroot%\Microsoft.NET\Framework64\v4.0.30319\SetupCache\v4.6.01055 資料夾並執行setup.exe啟動.NET Framework修復:
cd\Windows\Microsoft.NET\Framework64\v4.0.30319\SetupCache\V4.6.0155
setup.exe /repair /x86 /x64 /ia64 /norestart
3. 啟動.NET Framework4.6.1安裝程式後選擇「將.NET Framework4.6.1修復成原始狀態」
4. 修復後依指示重新開機。
5. IIS重新啟動。

2016年4月21日 星期四

SQL Server無法附加資料庫? Microsoft SQL Server, 錯誤: 5120


SQL Server附加資料庫時出現存取被拒的錯誤訊息 (Microsoft SQL Server, 錯誤: 5120)

原因: 無該資料庫檔案存取權限、無存放該資料庫檔案資料夾存取權限...

解法1. 
增加資料庫檔案的必要存取權限,例如這篇

SQL Server附加資料庫失敗 錯誤碼 5120 作業系統錯誤 5 存取被


解法2. 
將資料庫檔案搬到有存取權限的資料夾,例如這篇

SQL Server無法附加資料庫? 錯誤碼 5120 / 作業系統: 5 權限不足



解法3.
用"以系統管理員身分執行"的方式開啟Microsoft SQL Server Management Studio,並執行附加作業。

有趣的是用這方式附加資料庫檔案成功以後,下次直接開啟Management Studio時還是可以正常存取資料庫。



2016年4月13日 星期三

sorted a Dictionary with C#

1. Using LINQ (Language-Integrated Query)
2. Converting Values and Keys to a List
3. Using delegate

Reference:

 1- How to sort a Dictionary with C#
 2- Sorts a Dictionary by keys and by values.
 3- 當心LINQ搜尋的效能陷阱

不想用LINQ、不想實作,有沒有更快速的方法?

有的,用SortedDictionary<TKey, TValue>Class取代Dictionary<TKey, TValue>即可自動以TKey做排序。

2016年4月12日 星期二

自由軟體授權條款

自由軟體既方便又好用,比較困擾的是授權條款,

有時想在專案中加入自由軟體,又會擔心不當引用,

腦容量有限,很少分配在這些法律條款上,

不管是查過授權條款已經確認引用合法,
或是測試階段先用在說,

每當看到License 這個單字,多少會顧慮有沒有踩到地雷...

這篇文只會摘錄曾經使用過的授權條款的授權原則,算是備忘,也避免一再的重複查詢。


自由軟體鑄造場(Open Source Software Foundry)-授權條款介紹
http://www.openfoundry.org/tw/licenses



The MIT License (MIT)

維基 MIT授權條款

OpenFoundry MIT授權條款

被授權人權利
給予被授權人對軟體沒有受限制的使用、重製、修改、合併 (merge)、出版發行(publish)、散布再授權、及販售軟體的重製物。
被授權人可依照程式上的需要修改授權條款內容成為適用內容。

被授權人義務
必須在所有的重製物或在軟體實體部份中將著作權聲明和允許聲明納入。


2016年4月7日 星期四

Method not found: 'CrystalDecisions.ReportAppServer.DataDefModel.PropertyBag CrystalDecisions.ReportAppServer.ReportDefModel.ISCRExportOptions.get_ExportOptionsEx()'

Method not found: 'CrystalDecisions.ReportAppServer.DataDefModel.PropertyBag CrystalDecisions.ReportAppServer.ReportDefModel.ISCRExportOptions.get_ExportOptionsEx()'

這台開發機會遇到這個狀況,大概是Crystal Report新舊版本交雜所導致,

解決方法:

移除"所有"的SAP Crystal Report (包含 Crystal Report for Visual Studio, Crystal Report Runtime )後重新安裝。

以下是包含Crystal Report for Visual Studio & Crystal Report runtime 64bit (V13.0.10.1385) 的下載連結,多人開發專案請先評估再安裝。

2016年1月10日 星期日

Visual Studio 2013 套件未正確載入 Microsoft.VisualStudio.Editor.Implementation.EditorPackage


未正確地載入套件
Microsoft.VisualStudio.Editor.Implementation.EditorPackage

可能是組態有所變更或安裝了其他擴充功能所致。如需詳細資訊,可查看檔案
c:\users\user account\AppData\Roaming\Microsoft\VisualStudio\12.0\ActivityLog.xml


按照訊息指示重啟Visual Studio,雖然不在出現此訊息,
開啟專案後,這訊息就跟鬼打牆一樣又冒了出來,

解決方法:

1、關閉Visual Studio
2、刪除ComponentModelCache這個資料夾
     C:\Users\{登入者}\AppData\Local\Microsoft\VisualStudio\12.0\ComponentModelCache

要注意的地方是
1、登入者=登入帳號
2、Local資料夾,按照訊息指示可能會一直在Roaming這個資料夾下打轉找不到要刪除的資料夾。