當前位置:首頁 » 編程語言 » phpchown

phpchown

發布時間: 2023-05-29 20:41:09

A. php 無法引入文件文件

首先,確保require('../lib/h.php')
如果存在問題,檢查apache和php的用戶和用戶組。可能是apache或php用戶無法讀取和執行目錄的關系。
解決辦法:要麼修改apache或php的用戶,要麼更改lib和../的所屬許可權。
chown 更改所屬用戶或用戶組
chmod 更改文件讀寫許可權
簡單的方法是chmod 777 ../
但是存在安全隱患。自己斟酌

B. PHP中的文件系統函數(一)

從這篇文章開始,我們將學習一系列的 PHP 文件系統相關函數。其實這些函數中,有很多都是我們經常用到的,大家並不需要刻意地去記住它們,只要知道有這么個東西,在使用的時候記得來查文檔就可以了。

文件路徑相關的函數往往在一些框架中會比較常見,而且多會配合 __FILE__ 、 __DIR__ 之類的魔術常量使用。

basename() 函數是獲得路徑中的文件名,它有兩個參數,第一個是文件的路徑,第二個是過濾掉的內容,比如第一條測試語句我們過濾掉文件的後綴名。

dirname() 返回的是路徑中的路徑部分,也就是不包含文件名的那部分內容,和 basename() 正好是相反的功能。

pathinfo() 函數用於以數組的形式返迴路徑中的信息,從結果來看,我們可以看到文件的 dirname 部分,basename 部分,以及文件的擴展名 extension 和不包含擴展名的 filename 內容。

realpath() 返回的是規范化的絕對路徑名,它擴展所有的符號連接並且處理輸入的路徑中的 ./ 、 ../ 以及多餘的 / ,返回的內容是標准規范的絕對路徑。

接下來,我們學習一些修改文件相關屬性的函數,主要就是在 linux 系統環境中的文件許可權信息的操作。

當然,首先我們得創建一個文件。和 Linux 中的命令是非常類似的。

touch() 函數除了給出要創建的文件名之外,還有兩個可選參數可以指定文件的創建時間及訪問時間,不給參數的話默認就是當前時間。這個文件名可以是相對或絕對路徑中有許可權的目錄,並在該目錄下創建一個空的文件。

通過 fileowner() 函數,我們可以獲得某個文件所屬的用戶,默認情況下我們的用戶是當前運行 PHP 腳本的用戶,也就是系統目前的登錄用戶。在這里,我們使用 chown() 函數,將用戶改為 www 用戶。clearstatcache() 是用於清理文件系統的緩存信息,如果不清理一下的話,fileowner() 返回的依然還是之前的用戶信息。

同理,使用 filegroup() 函數獲得文件的屬組信息,chgrp() 用於修改文件的屬組。fileperms() 用於返迴文件的許可權信息,它返回的是數字模式的文件訪問許可權,這里我們使用 sprintf() 格式化結果後獲得我們常用的 Linux 系統許可權格式。chmod() 函數用於修改文件的許可權,它的許可權參數是三個 8 進制數據組成的數字,也就是代表 Linux 系統中的 1 、2 、4 和它們的組合,所以我們需要在前面再加上一個 0 用於確保操作能夠正常執行。關於系統文件許可權的知識大家需要認真學習 Linux 系統中相關的內容。

注意,上述函數如果在命令行中運行失敗,大部分原因是沒有許可權,可以使用 sudo 進行測試。在 fastcgi 中運行時,就更加需要注意許可權問題,僅在我們伺服器可以操作的目錄中進行安全的文件許可權修改。

stat() 函數可以獲取到指定文件的所有屬性信息,在這里我們可以看到文件的 uid 、 gid 、 ctime 、 mtime 等信息。

在 Linux 系統中,有軟連接和硬連接的相關知識。其實軟連接就像是 Windows 中的快捷方式,而硬連接相關於復制了一份數據。在 PHP 中,也為我們提供了創建軟硬連接以及相關的一些操作。

使用 link() 函數創建的就是一個指定文件的硬連接文件,而使用 symlink() 創建的則是一個軟連接文件。相對來說,我們使用軟連接的場景會更多一些。lstat() 就和 stat() 函數的功能一樣,查看文件的各種屬性信息,不過 lstat() 函數針對的是軟硬連接文件。

同樣地,我們也可以修改軟硬連接的用戶和用戶組信息,不過它們的信息不能通過 fileowner() 或 filegroup() 查看。因為它們是連接文件,本身還是和原始文件綁定在一起的,使用 fileowner() 這類的函數查看到的依然是原始文件的信息。我們可以在系統環境中使用 ls -l 查看連接文件的用戶和用戶組信息是否修改成功。

今天的內容比較簡單,而且修改許可權的操作也並不常用。不過對於系統安全來,它們還是非常有用的,比如對於上傳來說,我們要預防上傳可執行文件的話,就可以通過修改文件的許可權來讓文件無法直接運行,從而起到安全保護的作用。另外,目錄路徑相關的操作也是一些框架的基礎,幾乎所有框架的入口或者說是 Composer 的入口,都會見到 dirname() 以及 basename() 之類函數的身影。

測試代碼:

https://github.com/zhangyue0503/dev-blog/blob/master/php/202010/source/6.PHP中的文件系統函數(一).php

參考文檔:

https://www.php.net/manual/zh/ref.filesystem.php

C. 請教centos php 多版本安裝共存切換

Linux下部署php多版本共存
背景說明
自php7問世,身為最新版本控的我馬上升級體驗,但是由於伺服器上還有舊程序在運行,只好部署一個php多版本共存環境。
現有環境是lnmp
- CentOS 6.7
- nginx 1.10.1
- mariadb-10.0.26
- php 7.0.8
為了更好兼容舊的php程序,推薦使用5.4.45. 主要是兼容mysql擴展。
開始安裝
首先要下載php-5.4.45.tar.gz源碼包。
通過源碼安裝
# tar xzvf php-5.4.45.tar.gz
# cd php-5.4.45

# ./configure --prefix=/usr/local/php54 --with-config-file-path=/usr/local/php54/etc --enable-fpm --with-fpm-user=www --with-fpm-group=www --with-mysql=mysqlnd --with-mysqli=mysqlnd --with-pdo-mysql=mysqlnd --with-iconv-dir --with-freetype-dir=/usr/local/freetype --with-jpeg-dir --with-png-dir --with-zlib --with-libxml-dir=/usr --enable-xml --disable-rpath --enable-bcmath --enable-shmop --enable-sysvsem --enable-inline-optimization --with-curl --enable-mbregex --enable-mbstring --with-mcrypt --enable-ftp --with-gd --enable-gd-native-ttf --with-openssl --with-mhash --enable-pcntl --enable-sockets --with-xmlrpc --enable-zip --enable-soap --with-gettext --disable-fileinfo --enable-intl --with-xsl

# make ZEND_EXTRA_LIBS='-liconv'
# make install
# cp php.ini-proction /usr/local/php/etc/php.ini

------------------------------------------------------------------------------------------------
php.ini 配置
post_max_size = 50M
upload_max_filesize = 50M
date.timezone = PRC
short_open_tag = On
cgi.fix_pathinfo=0
max_execution_time = 300
disable_functions=passthru,exec,system,chroot,scandir,chgrp,chown,shell_exec,proc_open,proc_get_status,popen,ini_alter,ini_restore,dl,openlog,syslog,readlink,symlink,popepassthru,stream_socket_server
------------------------------------------------------------------------------------------------
php-fpm.conf 配置
------------------------------
# vim /usr/local/php/etc/php-fpm.conf1
[global]
pid = /usr/local/php54/var/run/php-fpm.pid
error_log = /usr/local/php54/var/log/php-fpm.log
log_level = notice

[www]
listen = /tmp/php54-cgi.sock
listen.backlog = -1
listen.allowed_clients = 127.0.0.1:9001
listen.owner = www
listen.group = www
listen.mode = 0666
user = www
group = www
pm = dynamic
pm.max_children = 40
pm.start_servers = 20
pm.min_spare_servers = 20
pm.max_spare_servers = 40
request_terminate_timeout = 100
request_slowlog_timeout = 0
slowlog = var/log/slow.log

----------------------------------------------------------------------------------
啟動 php-fpm
# cp sapi/fpm/init.d.php-fpm /etc/init.d/php54-fpm
# chmod +x /etc/init.d/php54-fpm
# /etc/init.d/php54-fpm start
-------------------------------------------------------------------------------------------
修改nginx配置,對需要的服務配置使用php-5.4.45
location ~ [^/]\.php(/|$)
{
try_files $uri =404;
fastcgi_pass unix:/tmp/php54-cgi.sock;
fastcgi_index index.php;
include fastcgi.conf;
}
----------------------------------------------------------------------------------------
配置php-5.4.45 的php54-fpm 開機自動啟動
# chkconfig --add php54-fpm
# chkconfig php54-fpm on

D. 請linux高手解答搭建php環境問題,主要問題安裝phpmyadmin,訪問時出現403Forbidden錯誤,怎麼解決

這是我自己整理的你可以查考下
基本上沒有什麼包得
一、mysql安裝:
1.安裝bison和cmake
提示:MySQL 5.5 版本的安裝需要這兩個軟體,bison我們可以用方便的yum直接安裝好,cmake則用編譯安裝的辦法。
yum install bison
註:需安裝GCC,ncurses-devel。
wget
tar zxvf cmake-2.8.4.tar.gz
cd cmake-2.8.4/
./configure
gmake
gmake install

chkconfig iptables off 禁用iptables(永久生效)
service iptables stop (臨時生效)
3,安裝
提示:如果機器上已有自帶的MySQL版本,最好先卸載自帶的MySQL,以防以後使用的時候混淆。
卸載命令:yum remove mysql
如果不確定機器上是否自帶有MySQL,也一樣可以執行下卸載命令無妨。

/usr/sbin/groupadd mysql (如果有提示已存在,並不是錯誤)
/usr/sbin/useradd -g mysql mysql (如果有提示已存在,並不是錯誤)
mkdir -p /data/mysql
chown -R mysql:mysql /data/mysql
tar zxvf mysql-5.5.13.tar.gz
cd mysql-5.5.13
cmake . -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DMYSQL_DATADIR=/data/mysql -DSYSCONFDIR=/etc/mysql
make
make install

4,設置

cd /usr/local/mysql
cp ./support-files/my-huge.cnf /etc/my.cnf

編輯/etc/my.cnf
在 [mysqld] 段增加
datadir = /data/mysql
wait-timeout = 30
max_connections = 512
max_connect_errors = 10000000
在 [mysqld] 段修改
max_allowed_packet = 16M

./scripts/mysql_install_db --user=mysql
cp ./support-files/mysql.server /etc/rc.d/init.d/mysqld
chmod 755 /etc/rc.d/init.d/mysqld
chkconfig --add mysqld
chkconfig --level 3 mysqld on
編輯/etc/rc.d/init.d/mysqld
把basedir=編輯成basedir=/usr/local/mysql
把datadir=編輯成datadir=/data/mysql

service mysqld start
bin/mysqladmin -u root password 'password_for_root'
其中引號內的password_for_root是要設置的root密碼
service mysqld restart

/usr/local/mysql/bin/mysql -uroot -p

show databases;
===========================================================================
二、apache安裝

./configure --prefix=/usr/local/apache2 --enable-rewrite --enable-so
make;make install

groupadd apache
useradd -g apache -M -s /sbin/nologin apache

vi /usr/local/apache2/conf/httpd.conf
找到如下2句 並在行頭加#號注釋掉
User daemon
Group daemon
追加如下2句
User apache
Group apache

/usr/local/apache2/bin/apachectl start

lsof -i:80

測試:首先,關閉 service iptables stop
curl (linux)
http://伺服器IP(windows)

#cp /usr/local/src/httpd-2.2.19/build/rpm/httpd.init /etc/rc.d/init.d/httpd

#vim /etc/rc.d/init.d/httpd
#apachectl=/usr/local/apache2/bin/apachectl
#httpd=${HTTPD-/usr/local/apache2/bin/httpd}
#CONFFILE=/usr/local/apache2/conf/httpd.conf

#chmod +x /etc/init.d/httpd
#chmod 700 /etc/init.d/httpd
#設置httpd開機自啟動
#chkconfig --add httpd
#chkconfig --level 345 httpd on
#這樣,啟動、停止、重啟Apache就可以用以下方式了:
#/etc/init.d/httpd start
#/etc/init.d/httpd stop
#/etc/init.d/httpd restart

echo "/usr/local/apache2/bin/apachectl start" >> /etc/rc.local

====================================================================
三、php安裝:

yum install libjpeg*
yum install libpng*
tar zxvf php-5.3.3-CP.tar.gz
cd php-5.3.3

./configure --prefix=/usr/local/php --with-apxs2=/usr/local/apache2/bin/apxs --with-mysql=/usr/local/mysql --disable-debug --enable-safe-mode --enable-short-tags --with-gd --with-zlib --with-jpeg-dir --with-png-dir --enable-memory-limit --disable-posix --with-config-file-path=/usr/local/lib --with-mysqli=/usr/local/mysql/bin/mysql_config
make;make install
cp php.ini-proction /usr/local/lib/php.ini
[root@RHEL php-5.2.14]# vi /usr/local/apache2/conf/httpd.conf
在內容里搜一下是否有libphp5.so
我的情況 已經有了 如果沒有追加下面那句前面不帶#的
# LoadMole foo_mole moles/mod_foo.so
LoadMole php5_mole moles/libphp5.so
#
再搜索AddType關鍵字 在那附近追加如下一句
AddType application/x-httpd-php .php .phtml
再搜索下面一段 把第二句DirectoryIndex的後面追加index.php
<IfMole dir_mole>
DirectoryIndex index.html index.php
</IfMole>

cd /usr/local/apache2/htdocs/
vi index.php
輸入內容
<?php
phpinfo();
?>

vim /etc/selinux/config
注釋掉#SELINUX=enforcing 並追加SELINUX=disabled
修改完需重啟伺服器
[root@RHEL php-5.2.14]# /usr/local/apache2/bin/apachectl restart

不重啟:
# setenforce 0
# chcon -c -v -R -u system_u -r object_r -t textrel_shlib_t /usr/local/apache2/moles/libphp5.so
# /usr/local/apache2/bin/apachectl stop
#/usr/local/apache2/bin/apachectl start
# setenforce 1

[root@RHEL mysql]# curl -I /index.php
或者你在你的瀏覽器里輸入
vim phpmysql.php
輸入內容
<?php
mysql_connect("localhost","root","123456") or die("MySQL First Test:Failed");
echo "MySQL First Test:Success";
?>
因為我們編譯php的時候沒有加--with-mysqli選項 所以不支持mysqli擴展
[root@RHEL htdocs]# curl /phpmysql.php
MySQL First Test:Success
好了 我這里成功了
你可以再瀏覽器里輸入

=============================================================================
四、配置phpMyAdmin
wget

cd /root
tar -jxvf phpMyAdmin-3.3.7-all-languages.tar.bz2
test -d /var/www || mkdir -p /var/www #判斷是否存在此目錄,不存在則創建
mv phpMyAdmin-3.3.7-all-languages /var/www/phpMyAdmin
cp /var/www/phpMyAdmin/config.sample.inc.php /var/www/phpMyAdmin/config.inc.php
vi /var/www/phpMyAdmin/config.inc.php
追加$cfg['Lang'] = 'zh-utf-8';
----------可選設置 為phpMyAdmin設置50位的短語密碼---------
yum install expect
[root@RHEL src]# mkpasswd -l 50
nxcayzaoqygmp5e$
復制產生的短語密碼
[root@RHEL src]# vi /var/www/phpMyAdmin/config.inc.php
找到如下參數
$cfg['blowfish_secret'] = 'nxcayzaoqygmp5e$'
chown -R root.apache /var/www/phpMyAdmin
cd /usr/local/apache2/conf/
vi extra/phpmyadmin.conf
加入內容
Alias /phpMyAdmin /var/www/phpMyAdmin
<Location /phpMyAdmin>
Order deny,allow
Deny from all
Allow from 127.0.0.1
Allow from 10.110.108.55
#這里改成你實際允許訪問的ip
</Location>
vi httpd.conf
追加:Include conf/extra/phpmyadmin.conf
/usr/local/apache2/bin/apachectl stop
/usr/local/apache2/bin/apachectl start
lsof -i:80

熱點內容
nas存儲配置 發布:2024-03-19 13:04:13 瀏覽:224
磁存儲缺點 發布:2024-03-19 12:59:43 瀏覽:192
如何利用雲伺服器挖奇亞幣 發布:2024-03-19 12:59:41 瀏覽:324
android文字按鈕 發布:2024-03-19 12:58:45 瀏覽:107
安卓手機怎麼下載長垣 發布:2024-03-19 12:13:26 瀏覽:259
買車加裝什麼配置最劃算 發布:2024-03-19 11:34:54 瀏覽:282
存儲過程對接 發布:2024-03-19 11:15:43 瀏覽:855
android升級應用程序 發布:2024-03-19 10:57:56 瀏覽:610
存儲cas 發布:2024-03-19 10:39:10 瀏覽:269
scada源碼 發布:2024-03-19 10:39:01 瀏覽:154