[PHP] pathinfo()輕鬆取檔案副檔名、檔案名稱、根目錄相對路徑、資料夾名、

pathinfo()

可輕鬆取檔案名稱、副檔名、根目錄相對路徑、資料夾名

用法一

pathinfo($path, PATHINFO_EXTENSION);

// 參數 (選用)
PATHINFO_DIRNAME   //完整路徑
PATHINFO_BASENAME  //完整檔名
PATHINFO_EXTENSION //副檔名
PATHINFO_FILENAME  //檔名

用法二

$path_parts = pathinfo('/www/htdocs/inc/lib.inc.php');

echo $path_parts['dirname'], "n";
echo $path_parts['basename'], "n";
echo $path_parts['extension'], "n";
echo $path_parts['filename'], "n"; // since PHP 5.2.0

output:

/www/htdocs/inc
lib.inc.php
php
lib.inc

 

參考:

http://stackoverflow.com/questions/10368217/how-to-get-the-file-extension-in-php
http://php.net/manual/en/function.pathinfo.php

[……]

閱讀更多

[PHP] php7 Call to undefined function curl_init() , fix the issue

Move to Windowssystem32 folder:
libssh2.dll, php_curl.dll, ssleay32.dll, libeay32.dll

Move to Apache24bin folder
libssh2.dll

Uncomment extension=php_curl.dll

原文
http://php.net/manual/en/curl.installation.php

# PHP.ini取消註解
extension=php_curl.dll

# 移動PHP目錄中的下列檔案至 C:Windowssystem32中
libssh2.dll, php_curl.dll, ssleay32.dll, libeay32.dll
# 移動PHP目錄中的下列檔案至apachebin中
libssh2.dll

[……]

閱讀更多

MIS WAMP手動安裝及設定教學 Apache2.4 + PHP7 for windows10

手動安裝 Apache2.4 + PHP7 for windows10

首先,我該選x64或x86安裝呢?

何謂 x64 和 x86,可閱讀下方網址文章,本篇不多做解釋
x86和x64到底有什麼差異? http://www.ithome.com.tw/node/56880

注意 !!!

若安裝x64版本,PHP & Apache 都需要選擇x64版本,反之亦然

安裝 PHP7 for windows

PHP For Windows 官網

http://windows.php.net/

PHP For Windows 歷史版本 (官網)
 

本例下載 PHP 7.0 VC14 x64 Thread Safe

php-7.0.10-Win32-VC14-x64.zip

解壓縮至 PHP 的存放目錄
本例解壓縮至 C:php-7.0.10-Win32-VC14-x64

設定 php.ini PHP.ini 為PHP的設定檔

PHP安裝目錄中尚無 PHP.ini
但於安裝目錄中有下列2個檔案
php.ini-development 為開發環境用參考設定檔
php.ini-production    為正式環境用參考設定檔
本例複製 php.ini-development 更名為 php.ini 置於於PHP安裝目錄中 文字編輯器開啟 php.ini

以下為常用設定

視需求調整參數,至於設定內容就不於本篇討論



# 設定環境參數

short_open_tag = On
extension_dir = "c:/php-7.0.10-Win32-VC14-x64/ext"

# 設定延伸套件,把前方的「;」移除即可

extension=php_bz2.dll
extension=php_curl.dll
extension=php_gd2.dll
extension=php_mysqli.dll
extension=php_openssl.dll
儲存 php.ini

# 設定延伸套件

移動PHP目錄中的下列檔案至 C:Windowssystem32中
libssh2.dll, php_curl.dll, ssleay32.dll, libeay32.dll
移動PHP目錄中的下列檔案至apachebin中
libssh2.dll

安裝 Apache2.4 for windows

Apache for windows download
至 Apache Haus 下載 Apache 2.4.23

安裝 Apache2.4

本例下載 Apache 2.4.23 x64

httpd-2.4.23-x64-vc14.zip

解壓縮至 SERVER 的存放目錄

本例解壓縮至 C:AppServApache24

設定httpd.conf

httpd.conf 為 Apache的設定檔
先複製一份命名為 httpd.conf.bk 備份使用,以免改壞掉
文字編輯器開啟Apache安裝目錄中的  /conf/httpd.conf


# 設定環境參數

Define SRVROOT "C:/AppServ/Apache24"
Define DOCROOT "C:/AppServ/www" # 新增此行,網站根目錄
ServerRoot "${SRVROOT}"

注意!!!!!!!!!!
分隔路徑的斜線,要用「/」而不是 windows 檔案總管的「\」

<Directory />
    AllowOverride All
    Require all denied
</Directory>

DocumentRoot "${DOCROOT}"
<Directory "${DOCROOT}">
   Options Indexes FollowSymLinks
   AllowOverride All
   Require all granted
</Directory>

於最下方加入下列文字,Apache連接PHP7

#BEGIN PHP INSTALLER EDITS - REMOVE ONLY ON UNINSTALL 
AddHandler application/x-httpd-php .php 
AddType application/x-httpd-php .php .html 
LoadModule php7_module "C:/php-7.0.10-Win32-VC14-x64/php7apache2_4.dll" 
PHPIniDir "C:/php-7.0.10-Win32-VC14-x64/" 
#END PHP INSTALLER EDITS - REMOVE ONLY ON UNINSTALL

「C:/php-7.0.10-Win32-VC14-x64/」為PHP安裝目錄

注意!!!!!!!!!!

分隔路徑的斜線,要用「/」而不是 windows 檔案總管的「\」

所以是
「C:/php-7.0.10-Win32-VC14-x64/」

不是
「C:\php-7.0.10-Win32-VC14-x64\

儲存 httpd.conf

Apache安裝為 windows 服務,開機自動啟動

開啟 Win10 的 「命令提示字元(系統管理員)」

// 測試設定檔是否正確

錯誤會跳錯誤訊息,正確會顯示syntax OK,接著安裝服務

// 安裝服務,反之解除安裝為 httpd.exe -k uninstall

測試是否正確運行

在網站根目錄C:/AppServ/www下建立一個index.php檔案

運行 http://127.0.0.1
看到下列畫面,代表安裝成功

呼~打完收工!!

[……]

閱讀更多

[SQL] MySQL to PostgreSQL 好痛轉移,SQL語法差異

換資料庫真的好機掰,會有一堆未知問題,見招拆招,紀錄於下

LIMIT OFFSET

/* MySQL */
SELECT * FROM abc WHERE status=1 ORDER BY create_time DESC LIMIT 0 , 10
/* PostgreSQL */
SELECT * FROM abc WHERE status=1 ORDER BY create_time DESC LIMIT 10 OFFSET 0

# UPDATE 不能加 ORDER BY and LIMIT
/* MySQL */
UPDATE abc SET aaa=1 WHERE id<=100 ORDER BY status DESC LIMIT 10

/* PostgreSQL */
/* 若有需求要用子句解決 */
UPDATE abc main SET aaa=1
FROM
 ( SELECT id FROM page_builder WHERE id<=100 ORDER BY status DESC LIMIT 10 ) sub
WHERE main.id = sub.id

PHP

//mysql 取新增的id
mysql_insert_id() mysqli_insert_id();
//PostgreSQL

$re = pg_query($conn, "INSERT INTO foo (bar) values (123);");
$re
= pg_query("SELECT lastval();");
$row
= pg_fetch_row($re);
$insert_id
= $row
[0];

[……]

閱讀更多

[PHP] Fatal error: Uncaught Error: Call to undefined function ldap_connect apache2.4 php7 Windows

因為要用到 PHP  ldap_connect()
Fatal error: Uncaught Error: Call to undefined function ldap_connect()
設定方式網路上很多
主要是設定PHP.ini擴充套件,把前面的註解拿掉

extension=php_imap.dll

如果還不行
Copy PHP 目錄下的 libsasl.dll 到apache中的bin資料夾中

如果還不行
Copy PHP 目錄下的 libeay32.dll 及 ssleay32.dll 到 C:WindowsSystem32 中

基本上該設定的都設定了,但我還是不行,
這是一個怪問題,我用Nginx + PHP7
可以順利的call ldap_connect()
但用 apache2.4 就會跳 Fatal error
怪的是我用相同的PHP7,搞死人,
最後找到原因,以下解決我的問題
修改 PHP.ini

extension_dir = "ext"

改為

extension_dir = "C:/php-7.0.9-Win32-VC14-x64/ext"

也不知道為什麼,用Apache2.4預設的PHP.ini會有這樣的問題,用NginX反而不會
怪怪怪!!!

http://stackoverflow.com/questions/17204437/fatal-error-call-to-undefined-function-mb-detect-encoding

[……]

閱讀更多

[php] json_decode json file to array return NULL

This worked for me

<?php
$json_string = file_get_contents('json_string.txt');
$json_string = preg_replace( '/[^[:print:]]/', '',$json_string);
$obj = json_decode( $json_string , true );
print_r($obj);
exit;
?>

這問題有點見鬼,直接用字串測試,一樣的josn字串,正常,就是放進檔案用json_decode()會拋回個NULL,網路上看了很多方法都沒效,搞了我好久,以下跟大家分享,下方有範例檔

這樣是正常的
<?php
$json_string = '{"aaa":"bbb","0":{"bbb":"bbb","ccc":"ccc"}}';
$obj = json_decode( $json_string , true );
var_dump($obj);
?>
output:
array(2) { ["aaa"]=> string(3) "bbb" [0]=> array(2) { ["bbb"]=> string(3) "bbb" ["ccc"]=> string(3) "ccc" } }
放進檔案就不行
<?php
$json_string = file_get_contents('json_string.txt');
$obj = json_decode( $json_string , true );
var_dump($obj);
exit;
?>
output:
NULL

我覺得應該是檔案中有些隱藏字元導致,也許是跟編碼有關的字元,所以由檔案讀進字串後清除這些隱藏字元,結果成功了~喔耶

$json_string = preg_replace( '/[^[:print:]]/', '',$json_string);

像這樣子

<?php
$json_string = file_get_contents('json_string.txt');
$json_string = preg_replace( '/[^[:print:]]/', '',$json_string);
$obj = json_decode( $json_string , true );
print_r($obj);
exit;
?>


範例檔案下載
download
[……]

閱讀更多

PHP 解決 Deprecated: mysql_connect(): The mysql extension is deprecated and will be removed in the future: use mysqli or PDO instead in

php 版本,5.25.35.45.5,直接上5.5,但是程式出現如下錯誤:
Deprecated: mysql_connect(): The mysql extension is deprecated and will be removed in the future: use mysqli or PDO instead in….
官方明確說明,PHP 5.5.0中不推薦使用此擴展,它在PHP 7.0.0中被刪除。
而應該使用MySQLi或PDO_MySQL擴展。
當然,還沒有棄用,表示還可以用,是還可以苟且偷生一陣子,不過在PHP7就正式被移除囉,這要注意一下,話雖如此,早晚都要換的拉,不妨看一下解決方法吧。

解決方法一:

停用PHP顯示錯誤訊息

這絕對不是個好方法,我個人是不推薦使用,雖然這方法一勞永逸,但在開發PHP時,你將會知道錯誤訊息有多麼美好,Debug時才不會像無頭蒼蠅般,除非程式已經在一個很穩定的階段,不然非必要,不要關閉全部錯誤訊息,還是留給程式可以去設定是否顯示錯誤訊息的彈性。
以下介紹幾種PHP停用錯誤訊息的方法:

在PHP文件中加入,停用PHP錯誤訊息

如果還是出現錯誤訊息,請試下列方法

在.htaccess檔案中加入下面這一行 ( Apache專用 )

如果還是出現錯誤訊息,請試下列方法

在 PHP.ini 中找到 display_errors 這一行,沒這一行則添加,將值改為off。

解決方法二:

PHP排除特定錯誤層級

如果短期間沒打算繼續升級的話,還是可以在PHP5.5 使用 mysqli_connect() ,但停用所有錯誤訊息好像又太極端,下面這方法可以設定錯誤訊息級別,隱藏某些特定的錯誤級別,選擇排除顯示某指定錯誤級別,排除的錯誤級別將不會顯示在錯誤訊息上,排除E_DEPRECATED,mysql_connect()就可以繼續撐拉。

以下例子顯示所有錯誤,除了下列這幾個錯誤級別:

E_DEPRECATED棄用E_NOTICE注意E_WARNING警告E_STRICT嚴格

解決方法

mysql_connect 改用 mysqli_connect()

這是最正規的方式拉,也是最推薦的,就是乖乖升級吧,雖然升級的過程中會有一段陣痛,有點痛,以下提供很簡單的範例。

mysqli_connect() 範例如下

mysqli_connect() 建表SQL如下

[……]

閱讀更多

PHP Array 以元素值刪除指定元素

<?php
/**
* VECTOR COOL
* https://vector.cool
* 去除值為"ccc"的元素
*/

$arr=array(1=>'aaa',2=>'bbb',3=>'ccc');
unset($arr[array_search('ccc',$arr)]); //按元素值返回鍵名。去除後保持索引
print_r($a);

?>

參考:

[……]

閱讀更多