pCloud Partner Program

[PHP]array_filter with preg_match問題

程式技術/PHP 2020/09/08 11:27
views: 8751 times
在使用 array_filter 時, 由於原本的內容過濾條件需要用 regular expression 表示, 來將滿足條件的內容整理出來. 不料發現了問題.

問題的來源是在 array_filter 中, 若使用了 anonymous function , 在 anonymous function 中的變數 scope 是拿不到外部已設定好的變數. 也就是若要取得用變數傳入的值, 需要使用 global 指示詞.


如此一來才能順利使用動態的變數字串做為 array_filter 中使用 preg_match 的 pattern 參數. 完整測試程式碼請參考:

https://repl.it/@timhuangt/arrayFilter
top

好用方便的虛擬主機管理器 - CyberPanel

好用軟體 2020/06/20 15:09
views: 79690 times
這個管理工具, 是類似 cPanel、Plesk 這類的 hosting 服務的管理工具, 若是搭配 OpenLiteSpeed 版本的 web service 是完全免費的, 十分佛心.

而搭配 LiteSpeed 版本的 web service 的 CyberPanel Ent. 版, 在 1 domain 下, 2GB Ram 下也是每個月 0元, 可以參考價格說明:

https://cyberpanel.net/cyberpanel-enterprise/

而 OpenLiteSpeed 與 LiteSpeed Ent 版本有什麼差異, 可以參考這裡:

https://www.litespeedtech.com/products/litespeed-web-server/editions

安裝支援的系統有 Centos 7.x, Centos 8.x, Ubuntu 18.04, Ubuntu 20.04, 另外需要的條件有: Python 2.7, 1024MB or above Ram, 10GB Disk Space. 可以參考安裝說明:

https://cyberpanel.net/docs/installing-cyberpanel/

安裝完成後, 應用服務包含了 php (多版本), web, mysql, mail, ftp, dns, ssl 等, 十分方便, 另外管理介面使用 8090 port , 若希望管理介面也能用 let's encrypt ssl 可以參考這篇的設定方式:

https://cyberpanel.net/docs/2-cyberpanel-on-ssl/

簡單說明, 也就是建立一個 website, 域名為你想用來管理的域名, 然後再到管理介面左側選單的 SSL, Hostname SSL, 選擇你想用的 website 域名後, 再按下 Issue SSL 即可.

他的 email service web 介面使用了 rainloop 也十分方便, 另外也支援了 DKIM 功能, 一樣能透過 SSL/TLS 加密 email 與使用 smtp / pop3 / imap 等方式來存取.

這個工具十分方便, 有在管理多虛擬主機的朋友們可以參考.
top

php上實作301 Redirect指示方式

程式技術/PHP 2020/01/02 11:49
views: 166203 times
在 php 中若需要重導客戶端, 可以使用 302 重導:

header("Location: http://newlocation");

在不指定 response status 時, 上述內容會使用 302 重導.

若需要使用 301 重導, 可以使用如下程式:

1. 先宣告重導指示, 再進行重導:

header("HTTP/1.1 301 Moved Permanently");
header("Location: http://newlocation");

2. 直接使用 header 中的 response status 參數:

header("Location: http://newlocation", TRUE, 301);

以上兩種方式皆可以重導客戶端至指定目標, 並且以 301 Moved Permanently 方式指示.

繼續閱讀:
https://blog.longwin.com.tw/2015/09/php-301-302-redirect-header-2015/
https://stackoverflow.com/questions/7324645/php-header-redirect-301-what-are-the-implications
https://www.php.net/manual/en/function.header.php


top
TAG 301, 302, php, redirect

解決停用TLS1.0加密協議更新CURL問題

程式技術/PHP 2018/05/09 14:59
views: 77330 times
今天在解一個已停用 TLS 1.0 加密通訊協定問題時, 發現舊的 web server 上的 php curl 無法正常連線, 在 command line 下使用 curl https://xxx.xxx 時, 也會出現:

curl: (35) TCP connection reset by peer

研判為 curl 的原因造成, 由於需要使用 php 中的 curl_xxxx 系列指令與其他 server 的 api 溝通, 所以必須更新對應的模組來解決, 指令如下:

yum update nss curl openssl

更新完成後, 重起 apache 即完成正常呼叫其他 server api 停用 TLS1.0 的加密通訊協議問題.

參考資料:
https://stackoverflow.com/questions/30145089/tls-1-2-not-working-in-curl

top
TAG curl, nss, openssl, php

MongoDB使用PHP查找特定欄位是否存在

程式技術/Database 2017/07/24 14:59
views: 121122 times
由於 MongoDB 是一種 schema-free 的資料庫, 使用 Document 為基礎的存放方式, 所以若是想要查找特定欄位是否存在的語法就很重要了, 先來看看官方的資料:

https://docs.mongodb.com/manual/reference/operator/query/exists/

語法是使用 $exists 的方式來判定特定欄位是否存在, 若要轉為 php 語法的話, 可以使用如下:


來列出在 collection 中 field1 不存在的資料, 這對於使用特定欄位做為處理資料或作業資料來說, 可以方便地判斷, 也不用預先開好欄位, 很方便實用的一個用法.


top

CentOS中apache與php寫入權限與SELinux設定

程式技術/PHP 2016/06/23 11:14
views: 115506 times
由於 CentOS 有 SELinux 的權限設限, 所以相對一些安全層級也都比較高, 最近有個需要用 php 寫入檔案(或是上傳檔案的應用), 原本的 php 在預設狀況下, 就會對 /tmp 有寫入的權限(預設是會在 /tmp/systemd-private-xxxxxx 下的私有 /tmp), 所以上傳時沒有問題, 但使用 move_uploaded_file() 至目的目錄時, 會有寫入的權限問題.

方式如下:

Method A
1. 要寫入需要有對應的權限, 建議方式是將要寫入的目錄給予 apache 執行用戶的擁有者, 如 CentOS 配 apache 時, user 為 apache

chown -R apache /var/www/mysite1/upload


2. 此時只需要給予對應目錄 755 的權限即可(通常預設也是這個).

chmod -R 755 /var/www/mysite1/upload



Method B (不建議)
1. 直接給予該目錄 global write 的權限, 777 即可, 不過會有安全性的考量

chmod -R 777 /var/www/mysite1/upload



完成之後, 若仍無法寫入, 則是因為 SELinux 的設限, 所以即使完成了上面的設定也無法寫入, 此時要再進一步設定 SELinux, 方式如下:

sudo chcon -t httpd_sys_rw_content_t /var/www/mysite1/upload -R


原因為預設的 webservice 能擁有的權限角色為 httpd_sys_content_t , 是無法寫入檔案的, 所以需要再進一步設定 SELinux 才行.

參考資料:
https://blog.lysender.com/2015/07/centos-7-selinux-php-apache-cannot-writeaccess-file-no-matter-what/

另外寫得很仔細的 SELinux 資料可以參考:
https://www.digitalocean.com/community/tutorials/an-introduction-to-selinux-on-centos-7-part-1-basic-concepts
https://www.digitalocean.com/community/tutorials/an-introduction-to-selinux-on-centos-7-part-2-files-and-processes
https://www.digitalocean.com/community/tutorials/an-introduction-to-selinux-on-centos-7-part-3-users
top

PHP好用線上測試功能

程式技術/PHP 2016/02/03 11:03
views: 81217 times
這個線上的沙箱測試, 可以讓你在不同的 PHP 版本間進行 PHP程式的測試, 有時候需要一小段程式來測試與驗證時, 可以利用這樣的工具來達成, 網址:

http://sandbox.onlinephpfunctions.com/

不僅可以測試 php 程式碼, 還可以進行儲存與分享, 是在 php 程式開發時, 可以快速撰寫小程式的好用工具, 很方便快速, 請多多利用.

例如以 php 網站上的一個 callback function範例:


放在該網站執行並存檔分享連結為:
http://sandbox.onlinephpfunctions.com/code/c9a175417fddfc1ed0aef4a48feb5de384c49e3d

真的又快又方便!
top

使用PHP上傳圖片至Azure Storage供圖檔應用

程式技術/PHP 2015/05/05 23:04
views: 139655 times
使用 PHP 將圖檔上傳至 Microsoft Azure 雲端空間供圖檔應用, 有以下幾個步驟:

1. 建立 Azure 的 Storage Account , 並取得 key 與建立 container (也可以使用程式建立)
2. 安裝 Azure PHP Client: http://azure.microsoft.com/en-us/documentation/articles/storage-php-how-to-use-blobs/

2-1. 先安裝 Git
2-2. 依說明建立 composer.json 與下載 composer.phar (http://getcomposer.org/composer.phar), 並進行安裝: php composer.phar install
2-3. 完成程式下載

3. 在 php 程式碼中引入對應程式碼, 以上傳圖檔為例, 程式碼如下:


其中範例中的程式, 並沒有指定對應 blob 中的 Content-Type, 會使用預設的 application/octet-stream , 其實在網頁使用並無影響, 但若是直接連結會變成是下載的狀況, 比較不適合, 而且也應該是指定為正確的 Content-Type 較佳.

若有需要使用到 php 上傳圖檔至 Azure storage, 可以參考上面做法進行上傳應用.

相關資料:
Put Blob: https://msdn.microsoft.com/library/azure/dd179451.aspx

使用 ASP.NET 版本參考這篇:
http://blogs.msdn.com/b/ericsk/archive/2013/12/18/php-on-windows-azure-windows-azure-blob-storage.aspx

top

好用工具Encode Explorer

程式技術/PHP 2013/09/12 10:25
views: 375431 times
今天在協助朋友解決一個在 linux apache 下的 php 程式對中文檔名檔案存取的問題, 在思考在 linux 下的 file system 對中文檔名存放的編碼時, 想說直接找個工具來用比較快. 因為其實不需要真的去檢查看 file system 上中文檔名存放的編碼, 只需要找個 php 的 file explorer 來進行就可以了, 找出對應的編碼即可. 實際上, 之後的程式也是透過 php 存取, 所以用 php 的 file explorer 檢查是最方便不過了.

找到這個好用的工具, 短小精幹, 一支主程式, 就是這麼方便: Encode Explorer - http://encode-explorer.siineiolekala.net/

可以先試看看該網站的 demo: http://encode-explorer.siineiolekala.net/explorer/index.php

一支程式就可以做 file exploer 功能, 所以利用這樣的方式來檢查看中文檔名是否正常, 該程式預設是使用 utf-8 的, 不過朋友的虛擬主機上是 big5 的中文編碼, 所以在 Encode Exploer 下看到亂碼的中文檔名, 利用瀏覽器的編碼改為 big5 就看得到該中文檔名了, 這下就明白朋友的虛擬主機上的中文檔名是走 big5, 對後續在應用 timthumb.php 縮圖無法正確取得本地中文檔名的問題就解決了.

若網友們有碰到這樣的問題, 也可以試著用這套工具來檢查看看. 當然, 若是需要找個方便好用的 php file exploer, 這套工具也是十分方便好用呢!
top

免費試用Windows Azure的雲端服務

系統技術 2012/11/09 16:39
views: 141761 times
微軟的雲端服務 Windows Azure 目前有免費試用的版本, 方便給在學習及測試階段的開發者們一個好用方便的服務.

入口: http://www.windowsazure.com/

進來之後, 可以直接在線上申請試用 3個月免費, 點下[免費試用], 免費的內容如下:

    計算 / 每個月 750 小時的小型計算時數
    網站 / 10 個網站
    行動服務 / 10 個行動服務
    關聯式資料庫 / 1 個 SQL 資料庫
    SQL Reporting / 每個月 100 小時
    儲存體 / 35 GB 及 50,000,000 個儲存體交易
    頻寬 / 無限制輸入及 25 GB 輸出
    CDN / 20 GB 輸出及 500,000 個交易
    快取 / 128 MB
    Service Bus / 1,500 個轉送時數及 500,000 則訊息

登入 windows account 之後, 會需要輸入電話號碼(用來收開通簡訊)及信用卡驗證身份(避免濫用)後, 就可以順利開通了.

接下來就是使用這個 3個用的免費服務, 最快的方式是直接建立網站功能(即website), 免費內容可以建立10個網站, 所以就來新增一個網站看看, 從 Web Sites 內容下方, 按下 [+NEW] 後就可以新增一個網站, 接下來會有三個選項:

1. QUICK CREATE
2. CREATE WITH DATABASE
3. FROM GALLERY

為能快速就有個網站可以試玩看看, 我們來選 3. FROM GALLERY, 就可以利用架站的套件直接裝好來用, 如 Drupal, Wordpress, Joomla, Mediawiki 等.

來裝個 Drupal 試看看, 選擇後, 需要輸入資訊畫面如下:
用戶插入圖片

第一個 url 就需要輸入一個唯一網址, 然後建立一個新的MySQL資料庫, 選擇地區後, 按下一步, 輸入完成資料庫相關資訊後, 回到 Web Sites的管理介面, Windows Azure 會開始部署, 等一下下後, 就會出現部署完成的資訊, 並該 web site 的狀態為 running , 點下自訂的 url 後, 會進入設定安裝 drupal 的畫面如下:
用戶插入圖片

接下來就很單純啦, 一步一步就可以完成這個 drupal 的安裝. 真的很快很方便, 而且馬上就可以用了呢!

目前裝好了兩個測試的 web site, 一個是 wordpress: http://mypress.azurewebsites.net/ , 另一個就是 drupal: http://dp7.azurewebsites.net/ 還真的蠻方便的.

接下來也可以自行試看看用之前的 QUICK CREATE 來建立一個空的網站, 建好之後, 進到管理介面中的 configuration 可以看到預設的 .net framework version 是 4.5, php 是 5.3 的版本.

另外若需要用 ftp 管理, 要到 Dash board 中, 點右邊的 setup git publishing, 也就是 git publishing 和 ftp 都用一樣的帳號密碼, 詳情可以參考這篇:

http://blog.syntaxc4.net/post/2012/09/13/enabling-php-5-4-in-windows-azure-web-sites.aspx

這樣就可以利用 ftp 來進行檔案的上傳及管理了. 由於站台是可以執行 asp.net 及 php, 筆者也上傳了 asp 的檔案測試, 也是可以執行的, 有興趣的朋友們可以試看看這個 Windows Azure 提供的免費 3個月試用服務.

若是用量(QUOTA)超過, 預設是不會扣款, 只是服務會暫停, 測試的網站應該不太會這麼快就用完吧, 好好試用看看吧!

若是網站要自訂網域, 則必須在 SCALE 那裡將模式由 free 設為 shared 或 reserved 才行, 可以參考這篇: http://www.windowsazure.com/en-us/develop/net/common-tasks/custom-dns-web-site/

3種程式支援 sample:
php: http://w3.azurewebsites.net/1.php
asp: http://w3.azurewebsites.net/1.asp
aspx: http://w3.azurewebsites.net/1.aspx

快試看看吧!
top




DJI OM 4 折疊式手機雲台 手持穩定器(先創公司貨)
【SONY 索尼】2.1 聲道單件式環繞音響(HT-X8500)
ASUS 華碩 RT-AC68U 雙頻AC1900 無線網路分享器
TEAM十銓 L5 Lite 3D 1TB 2.5吋 SSD固態硬碟
統一 番茄汁(6入/組)
UNITEK TYPE-C 轉VGA/HDMI/PD充電/HUB 鋁合金多功能轉接器
亞果元素 CASA Hub VH1 Type-C 轉 VGA - HDMI二合一顯示轉接器
realme XT (8G/128G) 6.4吋6400萬畫素 四鏡頭鷹眼猛獸
DJI Mavic Mini 暢飛套裝
全新原彩Apple MacBook Air 13吋/i5/8G/256G
DJI Mavic Air 2 全能套裝 [先創公司貨]預購-送記憶卡
Patriot美商博帝 BURST 960G 2.5吋 SSD固態硬碟


 Waiting...