當前位置:首頁 > PHP教程 > php應用 > 列表

php *.php和/usr/local/php/bin/php *.php的區別

發布:smiling 來源: PHP粉絲網  添加日期:2016-08-30 14:50:53 瀏覽: 評論:0 

下文我們一起來看一篇關于在php中php *.php和/usr/local/php/bin/php *.php的區別是什么吧,這個小編目前也搞不明白了,我們一起來看看。

說一個基本概念,很多人可能會遇到過這種情況,有些PHP程序因為部署原因會在linux命令行下執行,這樣就會用到php命令執行,例如:

php index.php

很方便,但也會出現一些問題,例如:

PHP Fatal error:  Class 'PDO' not found in

PHP Fatal error:  Class 'Curl' not found in

PHP Fatal error:  Class 'Redis' not found in

...等等,我們統稱為Class not found in問題,其實原因看來就是沒有加入擴展,但是疑問也就從這里出來了,

怎么加入這些擴展?

為什么有時候在瀏覽器訪問web程序的時候同樣的環境怎么沒有出現這些問題,而且還能正常調用這些擴展類呢?

對于問題1,網上很多教程大家可以輸入google.com然后輸入Linux php加入某某擴展來查看解決,我們重點說下問題2。

確定問題現象,我們以lnmp環境為例,一步步分析,

首先這些擴展類和php是有關系的,加載的是否成功通過php.ini來查看,我們初期判斷兩邊是不是用了不同的php.ini?

下來我們就在不同的地方輸出phpinfo()查看php的基本信息,果然,

linux環境下:

Configuration File (php.ini) Path => /etc

Loaded Configuration File => /etc/php.ini

web環境下:

Configuration File (php.ini) Path => /usr/local/php/etc

Loaded Configuration File => /usr/local/php/etc/php.ini

通過上面的信息可以看出,兩邊用的php完全是不一樣的,為了確定,我們驗證了下通過/usr/local/php/bin/php來執行先前的報錯的php程序,發現一切正常PDO,Curl,Redis都正常調用。

為什么會出先這樣的情況呢:

那是因為,你在安裝完PHP后,“不經意”的操作中又進行了一遍php的安裝編譯操作,導致存放了兩分不同的php.ini文件,lnmp環境下的php.ini是放置在/usr/local/php/etc/php.ini,特殊操作會默認放置在/etc/php.ini,而且如果不配置php *.php的環境變量,他會默認讀取/etc/php.ini下的配置信息。從而導致在linux下使用php命令與web下不一致的結果。

問題找到了,改怎么解決的?

刪除“不經意”的操作中安裝編譯的php

配置php環境變量,讓php命令指向/usr/local/php/bin/php,我們以centOS為例配置環境變量進行說明:

[[email protected] ~]# vi /etc/profile

編輯profile文件,注,以下操作為永久有效。

在文件末尾加上如下兩行代碼:

  1. PATH=/usr/local/php/bin:$PATH 
  2. export PATH 
  3. # /etc/profile 
  4. # System wide environment and startup programs, for login setup 
  5. # Functions and aliases go in /etc/bashrc 
  6. # It's NOT a good idea to change this file unless you know what you 
  7. # are doing. It's much better to create a custom.sh shell script in 
  8. # /etc/profile.d/ to make custom changes to your environment, as this 
  9. # will prevent the need for merging in future updates. 
  10. pathmunge () { 
  11.     case ":${PATH}:" in 
  12.         *:"$1":*) 
  13.             ;; 
  14.         *) 
  15.             if [ "$2" = "after" ] ; then 
  16.                 PATH=$PATH:$1 
  17.             else 
  18.                 PATH=$1:$PATH 
  19.             fi 
  20.     esac 
  21. if [ -x /usr/bin/id ]; then 
  22.     if [ -z "$EUID" ]; then 
  23.         # ksh workaround 
  24.         EUID=`id -u` 
  25.         UID=`id -ru` 
  26.     fi 
  27.     USER="`id -un`" 
  28.     LOGNAME=$USER 
  29.     MAIL="/var/spool/mail/$USER" 
  30. fi 
  31. # Path manipulation 
  32. if [ "$EUID" = "0" ]; then 
  33.     pathmunge /sbin 
  34.     pathmunge /usr/sbin 
  35.     pathmunge /usr/local/sbin 
  36. else 
  37.     pathmunge /usr/local/sbin after 
  38.     pathmunge /usr/sbin after 
  39.     pathmunge /sbin after 
  40. fi 
  41. HOSTNAME=`/bin/hostname 2>/dev/null` 
  42. HISTSIZE=1000 
  43. if [ "$HISTCONTROL" = "ignorespace" ] ; then 
  44.     export HISTCONTROL=ignoreboth 
  45. else 
  46.     export HISTCONTROL=ignoredups 
  47. fi 
  48. export PATH USER LOGNAME MAIL HOSTNAME HISTSIZE HISTCONTROL 
  49. # By default, we want umask to get set. This sets it for login shell 
  50. # Current threshold for system reserved uid/gids is 200 
  51. # You could check uidgid reservation validity in 
  52. # /usr/share/doc/setup-*/uidgid file 
  53. if [ $UID -gt 199 ] && [ "`id -gn`" = "`id -un`" ]; then 
  54.     umask 002 
  55. else 
  56.     umask 022 
  57. fi 
  58. for i in /etc/profile.d/*.sh ; do 
  59.     if [ -r "$i" ]; then 
  60.         if [ "${-#*i}" != "$-" ]; then 
  61.             . "$i" 
  62.         else 
  63.             . "$i" >/dev/null 2>&1 
  64.         fi 
  65.     fi //phpfensi.com 
  66. done 
  67. unset i 
  68. unset pathmunge 
  69. PATH=/usr/local/php/bin:$PATH 
  70. export PATH 

要是剛才的修改馬上生效,需要執行以下代碼

[[email protected] ~]# source /etc/profile

這時再查看系統環境變量,就能看見剛才加的東西已經生效了.

  1. [[email protected] ~]# echo $PATH 
  2. /usr/local/php/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin 

現在使用php命令和/usr/local/php/bin/php是一個效果了,指向了同樣的php.ini文件.

Tags: php* usr local

分享到:

广西快3最大遗漏值统计表