pCloud Partner Program

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

程式技術/PHP 2016/06/23 11:14
views: 72915 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

實作讀取twitter內容的方式

程式技術/PHP 2016/03/09 17:58
views: 45273 times
今天有個需求, 是要讀取某 twitter 帳號的內容, 該帳號內容原本也就是公開的, 所以也就不用 follow 就可以讀取. 以下簡單介紹程式讀取的方式:

1. 先需要有個 twitter 帳號, 而已必須提供手機號碼並驗證
2. 到 https://apps.twitter.com/ 建立一個應用程式, 建立的時候也會通知你的帳號必須滿足上面 1. 的條件
3. 在建立好的應用程式中, 取得兩個重要的參數, key 與 secret (會在 Keys and Access Tokens 頁籤上)
4. 開始實作程式, 先參考這裡:
https://dev.twitter.com/oauth/reference/post/oauth2/token
https://dev.twitter.com/oauth/application-only
使用 oauth 取得 access token, 程式碼如下:

5. 取到 access_token 後, 就可以利用這個 user_timeline API 進行取得對應帳號的 tweeter 內容:
https://dev.twitter.com/rest/reference/get/statuses/user_timeline
程式碼如下:


這樣就可以順利取得對應的 twitter 帳號發表的內容了.

這篇使用了 PHP5 不使用 curl 方式的程式內容, 參考這篇(CURL-less method with PHP5):
http://stackoverflow.com/questions/5647461/how-do-i-send-a-post-request-with-php
top

PHP好用線上測試功能

程式技術/PHP 2016/02/03 11:03
views: 41778 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: 101504 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: 311746 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

php include file的檢查

程式技術/PHP 2010/03/23 19:56
views: 84928 times
在 php 程式中, 使用 include 的方式來將檔案含入是很常見的語法.

但是若某 php 程式, 同時會發生被 include 或獨立執行時, 如何判斷呢? 或是說某 1.php 程式, 本身可以執行, 也會被 2.php include, 但發生這兩種不同的狀況時, 會需要 1.php 有不同的執行結果, 要如何偵測這個狀況呢?

目前查到的手法, 是利用 __FILE__ 和 $_SERVER["SCRIPT_FILNENAME"] 兩個變數來檢查. 也就是說, 在 1.php 的程式中, 使用如下的程式片斷:



這是利用了 __FILE__ 這個 php 常數, 在 php 程式中, 會被設定為自己的檔名的緣故, 所以可以這樣來利用判斷. 或許還有其他手法, 或更直接的方式來判斷, 也歡迎大家提供!!

參考資料: http://www.programmer-club.com.tw/ShowSameTitleN/php/6727.html
關於 __FILE__ 的這個 magic constant 可以參考: http://www.php.net/manual/en/language.constants.predefined.php
top
TAG include, php

用GIF動畫做Captcha

程式技術/PHP 2010/01/25 13:32
views: 75634 times
一般 Captcha (用來分辨是否是人的一種方式, 可以參考: http://zh.wikipedia.org/zh-tw/CAPTCHA ) 都是靜態或是聲音的方式來讓人辨識, 不過今天要介紹這個是用動畫做的.

用動畫的話, 比較方便的格式是 gif 檔的動畫格式, 利用動畫的方式, 把"數學問題"顯示出來(當然是簡單的), 例如 4 + 8 = ? 這樣, 一格一格地秀出來, 如下:

用戶插入圖片

(圖片引用自: http://www.querythe.net/Animated-Gif-Captcha/ )

這樣一來, 就可以避開破解的可能, 而且是用問題的方式來回答, 對於非人類的"機器人"或程式, 就有一定的防禦功能, 效果應該很不錯.

這個網站 http://www.querythe.net/Animated-Gif-Captcha/ 提供了免費的 php script 供 gif 動畫的 Captcha 來讓大家使用, 很不錯的免費 captcha 動畫gif版本. 大家可以試看看.

其他也有靜態的版本, 這裡有 freecap: http://www.puremango.co.uk/2005/04/php_captcha_script_113/ , 雖然還有許多其他的, 不過這個 gif 的版本是很特別的一個 captcha , 又有創意, 也有不錯的功能.



top
TAG captcha, gif, php

好用php線上教學資料

程式技術/PHP 2008/09/25 16:29
views: 81615 times
今天朋友問到一個架站的問題, 發現他的網站留言不會寫入, 他大概檢查完後, 把錯誤訊息給我看了一下, 發現可能原因是寫入檔案的問題造成的錯誤. 於是朋友就說要是會寫程式就好了, 我便幫忙找一下看有沒有教學的資料.

php我最常用的就是官網了 (www.php.net), 便把這個資料給朋友看, 他說英文閱讀吃力, 我記得官網上有多國語的功能, 於是一邊找, 也發現了好資料, 就是 php 的入門資料, 而且還是中文版本的哦, 記錄下來給大家學習參考用囉: http://docs.php.net/manual/tw/getting-started.php

由於 php + mysql 真的有很多好用的架站軟體, 免費套件, 基於這些理由, 若有心想學好程式的人, 真的可以好好學學呢, 這篇資料給大家參考!
top
TAG manual, php

eAccelerator安裝好囉

程式技術/PHP 2007/05/10 16:12
views: 149479 times
久聞 eAccelerator 大名, 今天同事在一台 BSD 的環境下安裝好 php 的 eAccelerator 的組件, 據說可以大幅提昇 php 效能, 可想見, 將 php build 好的 binary code cache 在目錄下, 應該對於 php 的效能有顯著提昇沒錯, 於是就開始著手安裝 eAccelerator 囉...

我是參考了這篇文章, http://www.tiec.tp.edu.tw/lifetype/post/102/5552, 感謝原作者用心說明, 接下來進行安裝, 由於我的環境是 appserv, 所以要先到 http://www.arnot.info/eaccelerator/ 找對應版本的 eAccelerator dll 版本, 下載後, copy 至 php 的 extension 目錄下, 並進行 php.ini 的調整(特別注意是eaccelerator.cache_dir 參數, 記得要先開好目錄, 這樣 eAccelerator 才能將 build 好的 binary code 存放在該位置), 完成後就直接重起 apache 即可, 接下來利用 phpinfo 來 check 一下(或利用指令 php -v 來觀察), 畫面中出現如下的 eAccelerator 字眼就代表安裝成功囉:

用戶插入圖片

接下來就 check 看網頁工作是否正常, 原則上第一次會進行 build binary 的動作並存在指定的目錄下, 會稍微慢一點點, 但第二次之後, 就會跑得飛快, 相信你會滿意地.

more..

top

php中改變ini設置方法

程式技術/PHP 2006/12/11 00:18
views: 125655 times
在 php 中, 有時需要調整 ini 內的設定值, 以獲得某些特性, 例如將 display_errors 參數設置為 Off 時, 做為錯誤資訊隱藏, 但是在寫作或除錯程式時, 希望能將此參數設置為 On, 設置完成後又要重起 apache, 這樣不僅不方便, 又會影響服務, 此時使用 ini_set() 函數將會是最方便有效的方式.

string ini_set ( string varname, string newvalue )
函數用法: http://tw2.php.net/manual/tw/function.ini-set.php

利用 ini_set 可以將 ini 的參數於設置時更動, 並於該 php 結束時復原, 若需要提早復原, 可以利用 ini_restore ( string varname ) 進行參數復原操作.

如此一來, 便能方便快速地在某些程式裡進行參數調整又不影響其他程式運行, 將能有效方便維護及應用. 後面為一個範例:

http://sample.diary.tw/6/ini.php

另外值得注意的是, 此參數可用 On, on, 1 代表開啟, 利用 Off, off, 0 代表關閉!

參考資料:
http://blog.chweng.idv.tw/archives/413/

top




Nextbit Robin 5.2吋六核心智慧型手機 Microsoft Office 365 中文家用版PKC (無光碟)
ASUS華碩 AC1900 雙頻無線路由器 RT-AC68U 美國 VORNADO 533 渦流空氣循環機 (黑色)
御茶園 每朝健康綠茶(650mlx24入) 每朝健康 雙纖綠茶(650mlx24入)


 Waiting...