2017年6月27日 星期二

Apache 停機小技巧 調整 404 not Found

在網站上線後,要顧慮的就很多啦
如果網站要停機進行調整,就要寫公告訊息

而網站連結眾多,怎麼在讓使用者連結時都會顯示停機公告呢?

我們可以在停機時,指向至一個空的網站即可
當使用者連線時,就會連不上原本的網頁
這時就會出現404 找不到網頁

因此就可以將404指向至公告頁即可
有兩種作法


1.調整Httpd.conf

ErrorDocument 404 /errors/not_found.html


2.如果有開mod_rewirte  可以設定在.htaccess


ErrorDocument 404 /pages/errors/404.php

RewriteEngine On
RewriteBase /

RewriteCond %{REQUEST_URI} ^/404/$
RewriteRule ^(.*)$ /pages/errors/404.php [L]



參考資料:

  • https://httpd.apache.org/docs/2.4/custom-error.html
  • https://stackoverflow.com/questions/19962787/rewrite-url-after-redirecting-404-error-htaccess

2017年6月14日 星期三

如何IE8以前版本支援 Javascript .trim()


一樣處理舊系統的Bug ,一樣是萬惡的IE 搞出來的

在IE8 前 Javascript  String.trim() 似乎會無作用

所以要自己處理並宣告一下,才能正常使用

相容性作法如下:

if(typeof String.prototype.trim !== 'function') {
  String.prototype.trim = function() {
        return this.replace(/^\s+|\s+$/g, '');
 } } 


這樣即可達到相容性了

參考資料:  https://stackoverflow.com/questions/2308134/trim-in-javascript-not-working-in-ie

2017年5月24日 星期三

showModalDialog 如何改成使用window.open


showModalDialog 是無法在新版的瀏覽器上使用了,所以別再花時間找解法,真正的解法就只能改寫,即然要改寫,就有很多種作法,看是要用jquery的Dialog改,還是要用傳統的window.open來改都可以,這篇是要教你如何用最簡單的方式改寫讓網頁可以正常使用
當要改寫時,我這裡分兩部份,一為開啟,一為回傳值,可以依你的網站使用的性質進行調整。如果你的網站使用showModalDialog 非常單純,只是純粹開啟網頁這樣只要處理如何開啟的轉換即可,首先可以加上以下這段語法:
// fix for deprecated method in Chrome 37
     window.showModalDialog = function (arg1, arg2, arg3) {

        var w;
        var h;
        var resizable = "no";
        var scroll = "no";
        var status = "no";

        // get the modal specs
        var mdattrs = arg3.split(";");
        for (i = 0; i < mdattrs.length; i++) {
           var mdattr = mdattrs[i].split(":");

           var n = mdattr[0];
           var v = mdattr[1];
           if (n) { n = n.trim().toLowerCase(); }
           if (v) { v = v.trim().toLowerCase(); }

           if (n == "dialogheight") {
              h = v.replace("px", "");
           } else if (n == "dialogwidth") {
              w = v.replace("px", "");
           } else if (n == "resizable") {
              resizable = v;
           } else if (n == "scroll") {
              scroll = v;
           } else if (n == "status") {
              status = v;
           }
        }

        var left = window.screenX + (window.outerWidth / 2) - (w / 2);
        var top = window.screenY + (window.outerHeight / 2) - (h / 2);
        var targetWin = window.open(arg1, arg1, 'toolbar=no, location=no, directories=no, status=' + status + ', menubar=no, scrollbars=' + scroll + ', resizable=' + resizable + ', copyhistory=no, width=' + w + ', height=' + h + ', top=' + top + ', left=' + left);
        targetWin.focus();
     };
這段主要是將window.showModalDialog進行宣告,如在IE會是覆寫改用此作法,這樣原本的showModalDialog都不用改code,即可運行,這樣至少不用一行一行CODE去改寫
解決了開啟之後,接下來就是回傳值了,這就沒那麼簡單,原本showModalDialog的作法是在呼叫時用變數去接回傳值,等該視窗處理完成後就會將回傳值放置該變數中,如下示意
呼叫頁(父頁)
var returnValue = window.showModalDialog(…);

處理頁(子頁)
window.returnValue = data;
window.close();

然後returnValue 就能接到值啦,是蠻方便的,但如果用window.open作就沒辦法這麼簡單做啦,改用window.open,因為視窗開啟後,其它頁面還是都能作業,所以父頁不能在那等待接值,因此要從子頁主動回傳參數才行,所以我們就要利用以下的方式進行改寫
呼叫頁(父頁)  宣告一個function 準備來接收子頁的回傳值
function setReturnValue(data){
  if (data != null)  {
        document.forms[0].elements["id"].value = data[0];
        ….
    }
}


處理頁(子頁) 在原本的window.returnValue =…  改成用
  window.opener.setReturnValue(data) ;

將值傳至父頁,這樣即可完成改寫啦,希望這篇說明能幫助到你!!

參考資料:

2017年5月23日 星期二

showModalDialog在IE11失效排除法


Javascript showModalDialog 是非正規的用法,微軟自己發明的,原本其它瀏覽器都還有支援,但在chrome v37 之後也不支援了,沒想到微軟在IE10之後自己也不支援了,真是有點給他OOXX的
所以目前一些舊網站如有使用了showModalDialog  要如何是好呢? 如果是只限IE使用的網站,最簡單的就是在網頁上強制降版使用相容性來檢視 這樣就能恢復原有的功能,只要在網頁的meta加上以下這句,這樣在開啟網頁時就會自動以IE8的相容性檢視來運行此網頁

<meta http-equiv="x-ua-compatible" content="ie=8" />

不過這個只限網站在IE瀏覽器上使用,如要在其它瀏覽器上使用,只能走上改寫一途了

2017年3月7日 星期二

CKEditor 如何設定資料無

標籤


CKEditor 預設在使用時,會在最外層加上<P> </P>
剛好遇到一個案例,是需要一行的CKEditor
當編輯好的內容於 前端顯示時,會因為<P> </P> 所以導致 呈現時 資料造成版型跑掉了

因此,要改一下參數,讓CKEditor 不要加上<P> 標籤

可以修改 CKEditor\config.js
CKEDITOR.editorConfig = function( config ) { config.enterMode = CKEDITOR.ENTER_BR // pressing the ENTER Key puts the <br/> tag config.shiftEnterMode = CKEDITOR.ENTER_P; //pressing the SHIFT + ENTER Keys puts the <p> tag }; 

這樣在使用編輯器時,就不會帶入<P> tag了,不過原本已存在的資料 不會讀出自行去除<P> 這還是要靠自己才行


參考資料:
https://processwire.com/talk/topic/10999-ckeditor-remove-wrapping-from-in-source-code/

2017年1月10日 星期二

MYSQL忘記密碼重設密碼


當忘記MYSQL 密碼或是將一個資料庫儲存實體移至在別處執行時
有可能會出現以下訊息:

ERROR 1045 (28000): Access denied for user 'root'@'127.0.0.1' (using password: YES)



如要重設密碼來解這問題,可以依以下方式操作:

1.先停掉mysql 服務,在console or command line 下執行

mysqld --skip-grant-tables
這個指令用以啟動mysql,但會跳過權限檢查。

網路上有人寫只要在my.ini 之中的
[mysqld] 下加上
skip-grant-tables

後重啟MYSQL 也可以做到

2.要另一個console 下連線mysql的指令

mysql -u root

應該就可以不進行權限驗證,連線登入成功

3.進行密碼的重設
use mysql

UPDATE user SET password=PASSWORD("123456") WHERE User = 'root' AND Host = 'localhost';

而在新版的MYSQL (EX: v5.7.x )權限架構已有些不同,所以要改用以下指令執行:

UPDATE mysql.user SET authentication_string = PASSWORD('123456'), password_expired = 'N'  WHERE User = 'root' AND Host = 'localhost';

4.執行後即完成密碼重置的動作,別忘了 mysql 要重啟服務,如果你不是改在參數檔,像我上述第一點請執行以下指令:

c:\mysql\bin\mysqladmin -u root shutdown

5.重啟後即可利用新密碼登入系統


2017年1月3日 星期二

Tomcat AJP connecting to backend failed 排除

最近在追查apache+tomcat 一天總有一二次的不明斷線,而等一陣子後就正常了,系統也不用重啟 在查了log發現以下ERROR LOG
  ajp_send_request::jk_ajp_common.c (1630): (ap) connecting to backend failed. Tomcat is probably not started or is listening on the wrong port (errno=60) 

看起來是因這個問題產出的LOG,去查了一下,蠻多在JBOSS上會發一這問題,不管用mod_jk或是用mod_proxay_ajp 都會發生 所以依建議,調整connectionTimeout 看看是否能改善


<connector address="${jboss.bind.address}" connectiontimeout="60000000" emptysessionpath="true" enablelookups="false" maxthreads="1000" port="8009" protocol="AJP/1.3" redirectport="8443">
參考資料:
http://stackoverflow.com/questions/13061385/apache-mod-jk-module-fail-to-connect-jboss-after-running-some-time