常見技術問題


PHP 上傳常遇到的問題

張貼者:2019年11月18日 下午8:21Jobs Dennis   [ 已更新 2019年11月18日 下午8:21 ]

PHP Upload Issues

This wiki page explains how to modify php.ini file or .htaccess file to support large-size uploads in PHP applications. Such issues usually happens when you try to record 2-3 minutes of audio/video streams and resulting Blobs size gets bigger/larger than 10MB.

.htaccess solution

It is a common case among all PHP default installations. You should define following values in .htaccess file if you've root-level privileges.

<IfModule mod_php4.c>
    php_value session.gc_maxlifetime 10800
    php_value max_input_time 10800
    php_value max_execution_time 10800
    php_value upload_max_filesize 500M
    php_value post_max_size 500M
</IfModule>

php.ini solution

Above technique rarely works on Amazon EC2. You need to login as root-user to the terminal; then search for all php.ini files:
find /etc/ -name "php.ini"
There should be php.ini file located in your apache installation directory. Its location varies for each installation that's why you should check all php.ini files.
(Dennis: 你的機器如果是不一樣的, 請連絡你的技術人員)

vi php.ini
Above command will open editing mode; then you should search and edit following values:

/session.gc_maxlifetime
/max_input_time
/max_execution_time
/upload_max_filesize
/post_max_size
Each line is searching a specific string. Note: Above command may work in replace mode instead of insert mode.

You should change default values to:

session.gc_maxlifetime=10800
max_input_time=10800
max_execution_time=10800
upload_max_filesize=500M
post_max_size=500M
Remember, NEVER forget "max_execution_time" because usually PHP execution process takes time to transcode and merge videofile.
:wq command can be used to save changes and close editing mode. You need to type this command in "replace" mode.

After modifying php.ini
You MUST restart/reboot apache server to make sure new changes are applied.

Check

Then
Please don't forget to set a temporary PHP page where you can check PHP-info:
<?php
// Show all information, defaults to INFO_ALL
phpinfo();

Final

Now, open that PHP page and search for all above values e.g. post_max_size etc.

File Permissions
[sudo] chmod 755 ./uploads
[sudo] chown -R www-data:www-data ./uploads
[sudo] chown -R apache:apache ./uploads
[sudo] chmod -R a+rwX ./*

P.S. Sometimes you need to manually set read/write access for directories like "uploads" however your demo has privileges to read/write WAV/WebM files in uploads directory.

經由 Web Service 建立一個使用者

張貼者:2019年9月27日 上午2:30Jack Liou   [ 已更新 2019年9月27日 上午2:35 ]

因為 Moodle 的文件系統(wiki)不好閱讀,且版本太多。客戶端的系統整合人員常常詢問、常被誤導。
本文說明如何利用 Moodle 內建的 Web Service 讓你的程式建立一個使用者(講師/學員),進而達到人員異動的功能。以下是詳細的步驟。

詳細的步驟

1. 進入綱站管理 -> 進階功能 -> 啟動 Web Services.
2. 在 綱站管理 -> 外掛 -> 網路服務 -> 外部服務,新增一個服務,勾選 enabled 及 authorised users only ;接著會被要求新增功能,在這個例子就是 core_user_create_users 這個功能。
3. 在剛剛所在的 綱站管理 內,點擊 autuorized users 進入新增一個 Web service 專用的 user 帳號。
4. 在 綱站管理 -> 外掛 -> 網路服務 -> 管理通訊協定 內,將 soap 打開。
5. 在 綱站管理 -> 外掛 -> 網路服務 -> 管理 token 內,新增 token,選擇剛剛設定的 user,忽略IP、日期,儲存。你會看到 token ,可以讓你的程式經由 Web Services 呼叫Moodle 功能。   
6. Moodle 的 WebService 網址像是: http://your_moodle_install/webserver/soap/server.php?wsdl=1&wstoken=your_token
7. 如果是用 PHP 來呼叫的程式碼:

// SETUP - NEED TO BE CHANGED
$functionname = 'core_user_create_users';
$user1 = new stdClass();
$user1->username = 'abcd';
$user1->password =  'Password123!';
$user1->firstname = 'ali';
$user1->lastname = 'asdsad';
$user1->email = 'asd@asd.com';
$user1->city = 'apo';
$user1->country = 'addfa';
$user1->auth = 'manual';
$params = array($user1);
 
// SOAP CALL
$serverurl = 'https://moodle.com.tw/webservice/soap/server.php?wsdl=1&wstoken=your_token';
///Do the main soap call
$client = new SoapClient($serverurl);
try {
  $resp = $client->__soapCall($functionname, array($params));
}
catch (SoapFault $e) {
  exit($e->faultstring);
}

注意事項

如果有問題要檢查,可以查詢Moodle 是否有開放呼叫?可以用這個網址測試: 
http://你的Moodle網站/admin/webservice/documentation.php 

如果還有問題,可以再爬一下這篇文章: 
https://www.moodletips.com/tag/web-services/



MySQL 備份檔還原至 Moodle 之步驟

張貼者:2019年2月25日 下午11:45Vin Yan   [ 已更新 2019年3月20日 下午7:39 ]

確認備份檔案

1. 進入主機後,到 mysql 備份檔的路徑位置,確認備份檔 .gz 名稱。

2. 若備份檔為壓縮檔 (.gz) ,則須先進行解壓縮
gunzip 壓縮檔名稱.sql.gz (如:moodle_要還原的日期.sql.gz )

3. 解壓縮後,確認 sql 備份檔名稱 (.sql) ,並將名稱記錄下來。

還原資料庫

1. 進入 mysql 資料庫
mysql -uroot -p

2. 輸入資料庫的密碼後,建立資料庫
CREATE DATABASE `資料庫名稱` CHARACTER SET utf8 COLLATE utf8_general_ci;

3. 離開資料庫後,執行還原動作
mysql -u root -p 資料庫名稱 < /備份檔路徑/備份檔名稱.sql
輸入資料庫的密碼後,會開始執行還原

4. 接著,可以進入 mysql 資料庫,確認是否有還原成功
show tables from 資料庫名稱;

若有顯示資料庫裡的 table,就代表已成功還原。

修改 Moodle 的 config.php

1. 還原成功後,離開資料庫
進入到moodle 資料夾中,修改 config.php 檔案,並更新資料庫的連線設定。
$CFG->dbtype    = 'mariadb';
$CFG->dblibrary = 'native';
$CFG->dbhost    = 'localhost';
$CFG->dbname    = '還原資料庫名稱';
$CFG->dbuser    = 'root';
$CFG->dbpass    = '資料庫密碼';
$CFG->prefix    = 'mdl_';
$CFG->dboptions = array (
  'dbpersist' => 0,
  'dbport' => '',
  'dbsocket' => '',
  'dbcollation' => 'utf8mb4_unicode_ci',
);

$CFG->wwwroot = 'http://Moodle網址';

2. 修改後,儲存離開。

3. 使用瀏覽器開啟 Moodle 網頁,確認是否有問題~


[OpenSSL]CVE-2014-0160

張貼者:2018年12月19日 下午6:50Jack Liou   [ 已更新 2018年12月19日 下午6:50 ]

CVE-2014-0160
The (1) TLS and (2) DTLS implementations in OpenSSL 1.0.1 before 1.0.1g do not properly handle Heartbeat Extension packets, which allows remote attackers to obtain sensitive information from process memory via crafted packets that trigger a buffer over-read, as demonstrated by reading private keys, related to d1_both.c and t1_lib.c, aka the Heartbleed bug.

先檢查OpenSSL版本是不是在1.0.1 ~1.0.1g的版本
# rpm -qa | grep openssl
# openssl version

後來查詢yum update後的log訊息,已有修復 漏mod_ssql洞編號:CVE-2014-0160
# rpm -q --changelog openssl-1.0.1e | grep -B 1 CVE-2014-0160

只要更新mod_ssl版本即可解決。

WebLog Expert 過濾 IP 的方法

張貼者:2018年9月21日 上午3:00Vin Yan   [ 已更新 2018年9月21日 上午3:14 ]

WebLog Expert 分析工具:載點

使用 WebLog Expert 分析工具,在分析 Access Log 時,會發現報告中的 Visitors 的 Hosts 的 IP 列表,有許多來自於本機端的 IP 、Load Balance 或是監控系統...等。
這些系統會存取或是連結 Moodle 平台,而造成報告的流量有差異或不符合實際狀況。

因此需要在 WebLog Expert 分析工具中,將這些 IP 過濾掉。

以下為過濾 IP 的操作步驟:
1. 點選已新增完成的 Profile 點選「Edit」。

2. 點選「Filters」頁籤,接著點選「Add...」按鈕。

3. 點選 「Exclude filter」以及「Host」 選項。

4. 填入需要過濾的 IP 後,點選「finish」。

5.即可看到過濾清單中,有剛剛輸入的 IP。


以上過濾 IP 的步驟完成後,再進行 Log 分析,即可得到數據正確的報告!

Windows 10 更新後,遠端桌面無法登入?

張貼者:2018年9月6日 上午2:18Moodle Taiwan   [ 已更新 2018年9月6日 上午2:19 ]

Q: Windows 10 遠端桌面無法登入Server, 出現"驗證錯誤"的訊息:
發生驗證錯誤。
要求的函數不受支援。
遠端電腦: <hostname>
這可能是 CredSSP 加密 Oracle 補救所造成的。
如需詳細資訊,請參閱 https://go.microsoft.com/fwlink/?linkid=866660
因為Windows 10更新後(因為修補 CredSSP 中存在遠端執行弱點, 攻擊者利用此弱點可轉送使用者認證, 以便在目標系統上執行程式碼...), 遠端桌面無法直接登入Server了 .出現"驗證錯誤"無法連線的訊息.

CredSSP 重大更新(CredSSP updates for CVE-2018-0886 ) -說明在這: Chinese 英文版 

解決辦法有2:

更新Server(伺服器/遠端)/Client(windows 10)

兩端都更新是最好的方法, 但 Server 更新是一個不小工程(如果是上線的Windows Server, 可能要停機); 所以提供關閉 oracle驗證暫時解決方式撐過對方更新前的過渡期, 下方說明.

修改 Client 群組原則

本機群組原則:
本機群組原則編輯器 -> 系統管理範本 -> 認證委派 -> 加密Oracle補救 ->選擇保護層級
Windows 10 更新CredSSP 遠端桌面無法直接登入Tips: 要打開 <<本機群組原則編輯器>> 在window的搜索輸入 : gpedit.msc 可以快速找到
保護層級有3:
  • 強制更新的用戶端 – 用戶端應用程式將無法回復為不安全的版本,並且使用 CredSSP 的服務將不接受未修補的用戶端。
  • 已降低 – 用戶端應用程式將無法回復為不安全的版本,但使用 CredSSP 的服務將會接受未修補的用戶端。
  • 易受攻擊 – 支援回復為不安全的版本,並且使用 CredSSP 的服務將會接受未修補的用戶端。
至於要如何選擇,必須視你的 server 與 client 有無修補來決定; 請參下方關係表.


整個遠端與用戶端的關係如下表:
看你的 server 與 client 修補與否及群組原則的設定, 查表就知道可否遠端.
Server遠端
UnpatchedForce updated clientsMitigatedVulnerable
Client用戶端
UnpatchedAllowedBlockedAllowedAllowed
Force updated clientsBlockedAllowedAllowedAllowed
MitigatedBlockedAllowedAllowedAllowed
VulnerableAllowedAllowedAllowedAllowed
所以你的遠端主機如果還沒更新,就只能將原則設定成  Vulnerable(易受攻擊)了.

關閉Windows自動更新

張貼者:2018年8月28日 上午2:52Vin Yan   [ 已更新 2018年8月28日 上午3:02 ]

Q:一開始 Windows 作業系統預設設定為自動更新,這樣會導致每次的更新都產生出更新檔,因為這些更新檔的容量較大,會造成占用硬碟空間的情況。

A:
為了避免這種情況,可以從系統的服務來關閉Windows Update,避免系統自動更新,關閉的步驟如下:

1. 點選鍵盤上的:windows鍵+R,輸入services.msc,即可開啟系統的服務。

2. 找到Windows Update,滑鼠點選右鍵,並選擇停止。



Apache日誌:logrotate 系統輪替工具設定

張貼者:2018年8月28日 上午2:36Vin Yan


1.預設的 logrotate 設定:

logrotate 主要在進行 log 檔的輪替功能,就是指將舊的登錄檔更改名稱,然後建立一個空的登錄檔。
輸入以下指令確認 logrotate 設定:
vi /etc/logrotate.d/httpd

Apache 2.2 的預設設定值如下:
/var/log/httpd/*log {
    missingok    //如果記錄檔不存在或有誤,會忽略錯誤,繼續進行
    notifempty    //如果記錄檔是空白, 不會做輪替
    sharedscripts    //所有的 log檔 都 rotate 後,統一執行一次腳本
    delaycompress    //延後壓縮直到下一次 rotate
    postrotate
    /sbin/service httpd reload > /dev/null 2>/dev/null || true
    endscript
}

再依照需求進行修改,可參考下面的參數解說

註:
/systemctl reload httpd.service > /dev/null 2>/dev/null || true
因 Apache 2.4 呼叫方式不同而有所差異。

2.設定 logrotate 實現 log 輪替

logrotate 的設定檔是 /etc/logrotate.conf,為設定 logrotate 的預設參數,而 /etc/logrotate.d/ 目錄下建立需要 rotate 的記錄檔,每項服務一個檔案,這樣對日後維護及管理也會較方便。

logrotate.d 參數說明

create建立新檔案來儲存, owner 及 group 是 root,權限是 600
daily、weekly、monthly、yearly每日、周、月、年整理一次記錄檔
missingok、nomissingok如果記錄檔不存在不會輸出錯誤,如果將進行rotate的檔案遺失,則忽略錯誤繼續進行下一個;值為 nomissingok ,檔案遺失時會出現警告
notifempty如果記錄檔是空白, 不會做輪替
compress使用 gzip 壓縮舊記錄檔
size 10M如果記錄檔大過 10MB 便會做輪替
delaycompress表示延後壓縮直到下一次 rotate
rotate 6檔案保留的數量,為 "0" 的時候,進行 rotate 時,則直接刪除前一份
dateext在檔案上加入日期,如:YYYYMMDD


3.設定之後,須重啟 Apache


4.測試 logrotate

若要測試 logrotate 設定是否成功可以下以下指令:
logrotate -f /etc/logrotate.conf

logrotate.conf 為 logrotate 設定檔。
指令意旨為對在/etc/logrotate.d/下,有設定 logrotate 的服務強制執行一次 rotate。

執行後,可以到 /var/log/httpd 查看 log 是否有 rotate 成功。

使用小畫家幫圖片打馬賽克

張貼者:2018年8月10日 下午12:37John Liou   [ 已更新 2018年8月10日 下午12:39 ]

有時候會想要在圖片上加上馬賽克, 是電腦又沒有灌上影像處理軟體, 這時候小畫家就可以派上用場了.

1.首先開啟要加上馬賽克的圖片,我這次是要把天氣方塊加上馬賽克,點擊《選取》把範圍圈選起來
要加上馬賽克的圖片

2.接著點擊調整大小
點擊調整大小

3.會出現一個對話框,在紅框內填上10,其餘地方不用動
調整大小2

4.接著你就看到所選的範圍被縮小了
選擇範圍已縮小

5.接著點擊調整大小,從右下角往右下拉至原圖大小.
拉至原圖大小

這樣就可以看到馬賽克的效果了. done.

windows排程

張貼者:2015年9月17日 上午1:00Wan Susan   [ John Liou 已於 2015年9月17日 上午1:00 更新 ]

Q:如何檢查windows排程
A:
1.請開啟控制台

2.輸入排程進行搜尋
排程

3.點擊排程工作
排程

4.查詢排程
排程

1-10 of 20