标签: php

  • 群晖Synology NAS CLI如何添加PHP Module on DSM6.2

    群晖Synology NAS CLI如何添加PHP Module on DSM6.2

    ITGeeker技术奇客用群晖Synology安装了私有云服务Nextcloud,但升级的时候始终碰到缺少pho module的问题,尽管你已经在web station当中打勾了相关的modules,还是会提示缺少相关模块。例如:

    PHP module zip not installed.
    Please ask your server administrator to install the module.
    
    PHP module OpenSSL not installed.
    Please ask your server administrator to install the module.
    

    群晖的DSM6.2同时支持PHP7.0和PHP5.6,根据你要使用的版本,相对应的更改一下版本数字就可以了。

    查看PHP相关参数和配置

    php --ini

    编辑PHP config

    sudo vi /usr/local/etc/php70/php.ini

    替换php module的正确路径及添加需要激活的Modules

    For PHP7.0

    #更改
    extension_dir = "/usr/local/lib/php70/modules"
    #为(ITGeeker技术奇客提醒你检查您系统的正确路径)
    extension_dir = "/volume1/@appstore/PHP7.0/usr/local/lib/php70/modules"
    #添加modules
    extension =  posix.so
    extension =  zip.so
    extension =  openssl.so

    For PHP5.6

    #更改
    extension_dir = "/usr/local/lib/php56/modules"
    #为(ITGeeker技术奇客提醒你检查您系统的正确路径)
    extension_dir = "/volume1/@appstore/PHP5.6/usr/local/lib/php56/modules"
    #添加modules
    extension =  posix.so
    extension =  zip.so
    extension =  openssl.so

    Synology重启PHP

    理论上是不需要,群辉每次调用PHP Cli时会重新读取php.ini文件。如果你要重启webstation,可以用cmd命令重启或者去管理面板通过gui重新启动。

    可以先查询一下你的php版本名称:

    sudo -i #管理员权限才行
    synoservicecfg --list | grep -i PHP
    synoservice --restart pkgctl-PHP7.2
    #或者重启Webstation
    synoservice --restart pkgctl-WebStation
  • WordPress REST API 定制化输出

    WordPress 自4.7 版本后与时俱进推出了REST API,如此一来想象空间又扩展了许多,如今WordPress 可以完全作为后端数据驱动了。本文通过几个例子展示如何定制化输出WordPress REST API 的相关数据。

    文章数据(posts)禁止某些字段显示

    默认的,当请求类似 your-site.com/wp-json/wp/v2/posts?per_page=5&page=1 的接口来获取文章列表,展示的不少字段对一般人来说是没有必要。

    秉承“如无必要,勿增实体”的原则,减少请求时候的数据量,可以通过下面的代码移除:

    function dw_rest_prepare_post( $data, $post, $request ) {
    	$_data = $data->data;
    	$params = $request->get_params();
    	// if ( ! isset( $params['id'] ) ) {
    		unset( $_data['excerpt'] );
    		unset( $_data['author'] );
    		unset( $_data['featured_media'] );
    		unset( $_data['format'] );
    		unset( $_data['ping_status'] );
    		unset( $_data['comment_status'] );
    		unset( $_data['sticky'] );
    		unset( $_data['template'] );
    	// }
    	$data->data = $_data;
    	return $data;
    }
    add_filter( 'rest_prepare_post', 'dw_rest_prepare_post', 10, 3 );
    

    文章数据(posts)中输出 post meta 所有字段

    可能考虑到数据隐私,文章数据(posts)默认并不显示post meta的相关字段,如果你需要输出对应文章下所有 post meta 字段,可以用下面的代码启用:

    register_rest_field( 'post', 'metadata', array(
     	'get_callback' => function ( $data ) {
     		return get_post_meta( $data['id'], '', '' );
     }, ));
    

    输出 post meta 特定字段

    接上,如果你在REST API 中仅仅想输出 post meta 特定字段而非全部,则通过类似下面代码:

    function dw_rest_prepare_post( $data, $post, $request ) {
    	$_data = $data->data;
    	$params = $request->get_params();
    	$thumb =  get_post_meta( $post->ID, 'thumb' );
    		if($thumb){
    			$_data['thumb_image'] = $thumb;
    		}	
    	$data->data = $_data;
    	return $data;
    }
    add_filter( 'rest_prepare_post', 'dw_rest_prepare_post', 10, 3 );
    

    上面的代码展示的是如何输出thumb 这个 post meta 字段,请按需使用。

    借助 Nginx 控制 /wp-json 的访问

    这个倒与WordPress 本身无关了,your-site.com/wp-json 的路由默认是所有人皆可访问。如果你基于服务器负载,或安全等方面考虑选择性输出,可以借助 Nginx 控制访问。先看下面的例子:

    location /wp-json {
          if ($http_user_agent !~ '(iPhone|Android)'){
            return 403;
           }
            try_files $uri $uri/ /index.php?$args;
    }
    

    如果你熟悉Nginx 语法,就知道上面的代码实现了:除了iOS 跟Android 设备(通过判断请求头的UA 信息),其它访问 /wp-json 的路径均返回403 状态码。这在一定程度上起到了保护作用。


    原文链接:来自 DeveWork | https://devework.com/wordpress-rest-api-dynamic-output.html

    via Jeff的阳台 https://devework.com/wordpress-rest-api-dynamic-output.html

  • WordPress WP_Image_Editor_Imagick 指令注入 ImageMagick漏洞

    ImageMagick于2016年5月4日突然曝出 CVE-2016-3714漏洞,简单的说就是黑客利用这个漏洞在你的网站上传图片即可给你植入木马,继而达到完全操控你的服务器的目的。 ImageMagick是一个使用非常广的组件,大量厂商都在处理图片的时候调用这个程序进行处理,而且很多开源应用也在核心代码中包含了ImageMagick选项。WordPress是著名的个人博客/CMS厂商,其核心源码中使用了PHP扩展ImageMagick。受到这个漏洞的影响,在攻击者拥有一定权限的情况下,可以在Wordpress中触发任意命令执行漏洞。

    解决方案:

    官方方案:通过配置策略文件暂时禁用ImageMagick,

    可在 “/etc/ImageMagick/policy.xml” 文件中添加如下代码: [crayon-5731823321052191436154/] 当然去官网下载最新版的ImageMagick也是一个坚决方案,官方最新版地址:https://www.imagemagick.org/script/binary-releases.php 最新版本:ImageMagick-7.0.1-2

    WordPress漏洞修复-未验证是否真正解决了问题

    在wordpress/wp-includes/media.php的_wp_image_editor_choose函数内部找到: [crayon-5731823321064537302611/] 修改为下面这行:(即调换最后数组的顺序) [crayon-573182332106b691782417/] 经过修改后,在阿里云VPS验证已经找不到该漏洞了,状态为漏洞文件被修改。ITGeeker总感觉这类似一个欺骗手法,但不管怎样,云服务器不会提醒你还有漏洞未修复了。

    吐槽

    国外的安全专家为此漏洞,新开了网站https://imagetragick.com,而且持续更新内容当中,大家也可以在上面找到一些相关的解决方案。 而相比国内的某云来说,他们会通过手机短信或者邮件通知你找到了高危漏洞,而且告诉你可以“一键修复”,让你点击去修复,然后就会告诉你,你还没付钱,不能给你修,真是有点趁火打劫啊! 如果你公布一下修复方法,对于没有技术能力的,可以付费修复也还好啊,这根本太赤裸了。

  • phpPgAdmin连接postgresql数据库的配置 CentOS6_64bit

    phpPgAdmin是Postgresql的图形化操作界面,但是很多ITGeeker往往在安装的时候很难一次性成功,根据多次实践,技术奇客在此与大家分享实战经验,此案例以postgresql9.3版本为例。

     

    确认一下是否已安装Postgresql数据库并启动:

    netstat -lnp|grep 5432

    1. 安装图形客户端phppgadmin

    yum install phpPgAdmin

    如果没有,安装一下EPEL源吧

    yum install epel-release

     

    2. phpPgAdmin.conf配置

    vi /etc/httpd/conf.d/phpPgAdmin.conf

    Alias /phpPgAdmin /usr/share/phpPgAdmin
    
    <Location /phpPgAdmin>
        Order allow,deny
    #   Deny from all
        Allow from all
    #   Allow from 127.0.0.1
        Allow from ::1
    # Allow from .example.com
    </Location>

    把Allow from改为客户端的ip地址或者本地127.0.0.1(安全性更好),或者改为Allow from all也可。

    3. pg_hba.conf配置

    vi /var/lib/pgsql/9.3/data/pg_hba.conf
    主要修改ipv4部分内容,都改成trust,这样最省事。

    # IPv4 local connections:
    host all all 127.0.0.1/32        trust
    host all all your IP/24          trust
    host all all your company IP/24  trust

    可以只添加公司的公网ip和自己家里的ip地址,这样比较安全。

    修改认证方式,将md5改为trust,然后保存

    4. postgresql.conf配置

    vi /var/lib/pgsql/9.3/data/postgresql.conf

    listen_addresses = '*'

    此处主要修改监听本地为监听所有ip,方便远程登入用。

    5. phpPgAdmin.conf配置

    vi \etc\httpd\conf.d\phpPgAdmin.conf

    Alias /phpPgAdmin /usr/share/phpPgAdmin
    
    Order allow,deny
    # Deny from all
    Allow from all
    # Allow from 127.0.0.1
    Allow from ::1
    # Allow from .example.com

    这里一定要配置好allow from all,不要让deny在前面,否则无法登入。

    6. phpPgAdmin的config.inc.php配置

    \usr\share\phpPgAdmin\conf\config.inc.php
    第18行改为

    $conf['servers'][0]['host'] = 'localhost';

    修改未localhost本地还是其它ip就看你要从哪里登入了。

    7. 现在准备登入phpPgAdmin了

    service httpd restart

    重启web apache服务

    service postgresql-9.3 restart

    重启postgresql服务,使刚才做的修改生效。
    访问 http://your ip address/phpPgAdmin/

    注意区分phpPgAdmin的大小写

    在Postgresql的web管理界面,输入登陆名及密码 -安装数据库时创建的用户和密码

     

    8. 相关问题及碰到困难

     

    1. 重置PostgreSQL密码:

     

     

    sudo - postgres
    
    psql
    
    #ALTER USER postgres with password '你的密码';
    \q
    
    exit
    或者有时需要重置postgres用户的linux密码:
    sudo passwd -d postgres 删除linux postgres的密码
    sudo -u postgres passwd 创建linux postgres的密码

     

     

    2. 如果碰到403 forbidden,请检查文件夹权限。

    3. 浏览器提示“您的 PHP 中没有完整的数据库支持”

    这表明没有安装php和php-pgsql软件包

    yum install php-pgsql

    yum会同时安装2个依赖包php-pdo,php-common,它们的安装顺序为php-common php-pdo php-pgsql,也可以手动依次安装。

    4. 网站打开后直接显示源码

    这表明没有安装php

    yum install php

    5. 如果碰到版本冲突

    Error: Package: php-pgsql-5.3.3-40.el6_6.x86_64 (updates)
               Requires: php-common(x86-64) = 5.3.3-40.el6_6
               Installed: php-common-5.4.33-2.el6.remi.x86_64 (@remi)
                   php-common(x86-64) = 5.4.33-2.el6.remi
               Available: php-common-5.3.3-38.el6.x86_64 (base)
                   php-common(x86-64) = 5.3.3-38.el6
               Available: php-common-5.3.3-40.el6_6.x86_64 (updates)
                   php-common(x86-64) = 5.3.3-40.el6_6
     You could try using --skip-broken to work around the problem
     You could try running: rpm -Va --nofiles --nodigest

    解决方案

    rpm -qa | grep php-common 
    rpm -e --nodeps php-common-5.4.33-2.el6.remi.x86_64

    使用强制移出冲突版本需注意其它软件和它依赖的关系,否则会引起其它软件无法运行等问题。

     

  • CentOS 7 64bit如何安装php soap模块

    错误提示:
    Your server does not have the SOAP Client class enabled – some gateway plugins which use SOAP may not work as expected.
    查看soap模块是否安装的办法:在php的安装目录下运行php -m来查看
    /usr/bin/php -m |grep 'sosap'

    如果没有安装,则进入php的安装源文件夹

    cd /tmp && tar zxvf php-5.4.16.tar.gz && cd php-5.4.16/ext/soap

    此处自己去php官方下载相应的版本。

    进入后运行phpize命令
    /usr/bin/phpize

    碰到错误提示,安装两个依赖包解决

    # /usr/bin/phpize
    Can’t find PHP headers in /usr/include/php
    The php-devel package is required for use of this command.
    yum install php-pear
    yum install php-devel

    查看信息是否有还有错误,没有出错的话运行如下命令:

    ./configure –-with-php-config=/usr/local/php/bin/php-config –enable-soap
    ./configure --with-php-config=/usr/bin/php-config --enable-soap

    然后是安装编译

    make
    最后是安装
    make install
    安装好之后会提示soap.so文件的保存路径
    # make install
    Installing shared extensions:     /usr/lib64/php/modules/
    接着修改php.ini文件
    vi /etc/php.ini
    查找/etc/php.ini中的extension_dir = “./”,默认是注释掉的
    修改为

    extension_dir = "/usr/lib64/php/modules/"

    并在此行后增加如下,然后保存:

    extension = "soap.so"

    执行php-fpm看看有没有错误

    没有php-fpm,安装一个吧
    yum install -y php-fpm
    重新启动apache:
    systemctl restart php-fpm
    再运行php -m就已经能看到扩展的soap模块了。
奇客罗方公众号 奇客罗方小程序 奇客罗方客服 ITGeeker Telegram

网站由ITGeeker技术奇客开发并管理;隶属于GeekerCloud奇客罗方智能科技
Site designed and developed by ITGeekerwhich is a sub-website of GeekerCloud
网站地图 | 沪ICP备2021031434号-4