2020年5月7日 星期四

PHP程式更新後確沒有更新,有沒有想到是程式碼cache(opcache)?


最近在維護一個客戶的PHP系統
建置及虛擬空間都是別人的,所以很多設定都是不明確的

因此程式碼調整後更新上去,發現似乎沒有作用
花了不少時間確認自己的寫法,最後確認應該不是自己的問題
才想到會不會是 cache  造成?

寫了幾隻小程式,新寫的程式一丟上顯示符合預期
再改再丟上去更新後,顯示還是舊的版本,Shit 真的猜中了

再用個phpinfo() 來看看設定

嗯.....出現了以下錯誤

Warning:phpinfo() has been disabled

很好,沒有php 沒有啟用 phpinfo ,多半管這麼多的,一定設定了很多怪東東
上網查了一下php 的 cache 解決方案

最多人在提的就是 APC  及OPcache

先來試試APC,查了一下 除了設定參數外,可以用以下函式來清除快取,這種最好測試了

apc_clear_cache();
執行後出現了  undefined function ...所以看來不是啟用APC
再來換OPcache,查了一下,一樣他有函式就可以清除快取,執行如下:

opcache_reset();
用了,哈~真的就是它,程式總算可以正常了


相關參考連結:
http://blog.roachking.net/blog/2012/11/30/apc-for-faster-php/
https://www.php.net/manual/en/function.opcache-reset.php

2020年4月29日 星期三

如何隱藏Apache的版本資訊

弱掃被掃到這項 Http Server Type and Version
現在資安這麼嚴格,像這種資訊都是不能讓別人知道,以免被駭客利用該版本的弱點進行攻擊

好的,要隱藏版本資訊也是非常容易,只要在http.conf中加上以上兩個參數即可


ServerTokens Prod
ServerSignature Off

存檔後再重啟即可,要驗證是否有效時,可以使用cUrl工具進行檢查,指令如下:

curl -I -k https://www.yourdomain.com

加上-k 是因為要讀https的,要請工具忽略驗證憑證
原本會看到

HTTP/1.1 200 OK
Date: Wed, 27 April 2020 14:25:00 GMT
Server: Apache/2.4.18 (Ubuntu)
Last-Modified: Wed, 27 April 2020 14:25:00 GMT

Accept-Ranges: bytes
Content-Length: 2432
Vary: Accept-Encoding
Content-Type: text/html

加上後會變成這樣

HTTP/1.1 200 OK
Date: Wed, 27 April 2020 14:25:00 GMT
Server: Apache/2.4.43 (Ubuntu)
Last-Modified: Wed, 27 April 2020 14:25:00 GMT
Accept-Ranges: bytes
Content-Length: 2432
Vary: Accept-Encoding
Content-Type: text/html

如何關閉Apache的80 Port


因資安弱點掃描,原本有一對外的服務走的是Https 443 port,不過弱掃出來 中了這項

Web Servers HTTP TRACE / TRACK Methods  Allowed  Port 80

雖然對外防火牆只開443Port, 應該不會造成問題才是,不過即然掃出來了就封起來吧
預設apache是開啟80 Port ,443 Port是要另外開啟的,往往都另外開啟 443 Port  就忘了應該關閉80 Port,其實關閉的方式很簡單,只要在 httpd.conf 中找尋

Listen 80

把這行加上 # ,註解掉,再重啟 apache 即可

當然如果你是用VirtualHost,就要再去VirtualHost裡去改設定


話說目前各家瀏覽器對安全性要求愈來愈高,看來之後apache內建的預設版本可能會是預設啟用https


2020年3月20日 星期五

Fullcalendar 如何更改游標為手指

 Fullcalendar 行事曆套件蠻強大的,在許多案子上均有使用
但預設移至行事曆上游標是沒有手指符號的,其實Goggle行事曆也是沒有
不過真的要達到時,要如何處理呢?

測了很多,因為大多都是舊版的作法,新版 4.x 資訊很少
所以蠻多都無用途,不過有找到以下作法,加以調整後測試是可行的

照著下面加上後,就可以達到效果

.fc-today {
       cursor: pointer;
}
.fc-future:not(.fc-sat):not(.fc-sun) {
    cursor: pointer;
}
.fc-td-emptycell {
    pointer-events: none;
}
.fc-bgevent-skeleton {
    pointer-events: none;
}

.fc-bgevent-skeleton .fc-bgevent {
        pointer-events: auto;
}

.fc-content-skeleton {
    pointer-events: none;
}

 .fc-content-skeleton .fc-event {
        pointer-events: auto;
 }

記下來方便日後使用

參考資料:
https://stackoverflow.com/questions/58526184/fullcalendar-tooltip-not-working-correctly-when-events-rendering-option-is-equa

2020年2月14日 星期五

SQL Server 透過指令備份資料庫

在客戶的主機安裝系統,想說要幫忙設定備份資料庫
沒想到,SQL Server Agent 啟無法啟用

所以只好想到使用指令的方式進行備份,看你目前需要什麼樣的備份就執行以下的 script


1.完整備份
DECLARE
@backupTime VARCHAR(20)
DECLARE
@fileName VARCHAR(1000)
SELECT
@backupTime=(CONVERT(VARCHAR(8), GETDATE(), 112) +REPLACE(CONVERT(VARCHAR(5), GETDATE(), 114), ':', ''))
SELECT
@fileName='D:\Backup\DB\DBNAME_'+@backupTime+'.bak'
BACKUP DATABASE [DBNAME] TO  DISK =@fileName  WITH NOFORMAT, NOINIT,  NAME = N'db-ALL', SKIP, NOREWIND, NOUNLOAD,  STATS = 10

GO

2.差異備份
DECLARE
@backupTime VARCHAR(20)
DECLARE
@backupWeek VARCHAR(2)
DECLARE
@fileName VARCHAR(1000)
SELECT
@backupTime=(CONVERT(VARCHAR(8), GETDATE(), 112) +REPLACE(CONVERT(VARCHAR(5), GETDATE(), 114), ':', ''))
SELECT
@backupWeek=datepark(wk,getdate())
SELECT
@fileName='D:\Backup\DB\DBNAME_'+@backupTime+'_'+@backupWeek+'.bak'
BACKUP DATABASE [DBNAME] TO  DISK =@fileName  WITH DIFFERENTIAL, NOFORMAT, NOINIT,  NAME = N'db_DIFFERENTIAL', SKIP, NOREWIND, NOUNLOAD,  STATS = 10

GO

3.交易備份
DECLARE
@backupTime VARCHAR(20)
DECLARE
@backupWeek VARCHAR(2)
DECLARE
@fileName VARCHAR(1000)
SELECT
@backupTime=(CONVERT(VARCHAR(8), GETDATE(), 112) +REPLACE(CONVERT(VARCHAR(5), GETDATE(), 114), ':', ''))
SELECT
@backupWeek=datepark(wk,getdate())
SELECT
@fileName='D:\Backup\DB\DBNAME_'+@backupTime+'_'+@backupWeek+'tran.bak'
BACKUP DATABASE [DBNAME] TO  DISK =@fileName  WITH NO_TRUNCATE, NOFORMAT, NOINIT,  NAME = N'db_transaction', SKIP, NOREWIND, NOUNLOAD,  STATS = 10

GO


可以選擇其一種 存到sql script file (EX: dbbackup.sql),再執行以下command 指令 進行執行
sqlcmd -S  instanceName -E -i c:\dbbackup.sql

這樣就可以備份資料庫啦
再利用工作排程把這個指令加入排程即可

2020年1月22日 星期三

CSS SPAN 如何設定不換行 (nowrap)

HTML TABLE HEADER 有個nowrap 屬性,可以讓標題過長時不換行,對照CSS
也有類似的參數可以設定
只要在那個 span 設定以下CSS 即可排除

span
{
white-space : nowrap
}

在此記下來,就不多解釋了,想看原理,可參考以下連結文章
他寫的很完整又有示意

https://www.puritys.me/docs-blog/article-31-CSS-語法,文字換行,強迫不換行。.html

2020年1月7日 星期二

Tomcat 在windows 服務中的設定


很久沒有安裝Tomcat ,又忘了差不多了
在windows平台上,安裝好 tomcat 後,應要再調整一下記憶體的設定
因為原本的設定,在執行比較大的系統時很容易會Out of Memory
所以安裝後第一件事就是要依目前主機的配置調大記憶體的設定

就在右下方常駐區 找到Apache Tomcat 的圖示,滑鼠右鍵按下選第一個configure
跳出以下視窗時,選擇Java Tabab,會到看到下圖




















然後就可以在Java Option: 區塊 加上一些參數
-Dfile.encoding=UTF-8       (這參數有中文亂碼再加上 不然可能會有亂碼 )
-XX:+HeapDumpOnOutOfMemoryError (如果要觀察Memory leak)
-XX:HeapDumpPath           (參數指定log輸出的位置,請注意資料夾寫入權限的問題)。

-XX:PermSize=64m
-XX:MaxPermSize=192m
-XX:ReservedCodeCacheSize=48m

下方也記得給上初始記憶體及最大記憶體的大小

當套用後,再啟動服務,如服務啟動失敗,多半就是記憶體設太大造成資源無法取得所以啟動失敗,可以再重新調整一下

上述是GUI的調整方式,當然還有其它調整法,但如果是採用 windows  服務啟動Tomcat,就建議利用這種方式設定,簡單不麻煩。