存档

文章标签 ‘php7’

ubuntu服务器安装php geoip拓展教程

2020年11月13日 评论已被关闭

我们可以安装php的geoip拓展来实现获取国家等ip地理信息,简单的说就是实现这个链接的函数功能:https://www.php.net/manual/en/book.geoip.php,如果没有安装拓展,这个链接上面函数的功能是不能使用的。

参考链接:
https://www.maxmind.com/en/home
https://www.miyuru.lk/geoiplegacy(这里可以下载到geoip的dat文件)
https://pecl.php.net/package/geoip
https://www.php.net/manual/en/geoip.setup.php
https://www.php.net/manual/en/book.geoip.php
https://db-ip.com/
https://db-ip.com/db/download/ip-to-city-lite
https://members.ip-api.com/#pricing
https://serverpilot.io/docs/how-to-install-the-php-geoip-extension/
https://blog.csdn.net/xpy870663266/article/details/94742491
https://valynkin.ru/maxmind-geoip2-na-ubuntu-1604-php56.html
https://blog.csdn.net/weixin_34245082/article/details/92028414

简单总结下ubuntu服务器安装php geoip拓展的过程吧
一开始我是在一台vps下操作,源是阿里云的源,装了php5.6,按照网上的搜索依次执行命令,发现遇到各种问题,上方的链接有的也是其中的解决办法,但是就是不行。后来换了一台服务器是官方源,sudo apt-get update之后,可以看到有php5.6-geoip拓展,输入sudo apt-get install php5.6-(按tab键可提示),这样的话就简单了(我怀疑是源的问题,没调试了)
可以看到apt-get里面的拓展,这样就方便了,不用自己编译安装,执行:
sudo apt-get install php5.6-geoip
执行完毕在/usr/share/GeoIP可以看到.dat文件和ipv6的dat文件
是执行完毕后,重启php5.6-fpm,发现问题了,discuz论坛无法回帖了,不过还好,我的需求是php7.4支持就可以了(我的服务器上是php5.6和php7.4共存的),所以我只需要执行:
sudo apt-get install php7.4-geoip
执行完毕后,重启php7.4-fpm,搞定

ubuntu服务器安装php geoip拓展教程就写到这里,只适合本人自己阅读,网友仅供参考(服务器环境有很大区别)

下面备注自动更新数据库的操作方法:
打开maxmind.com:登录后,个人中心:Services->My License Key
创建key之后,点击Download Config下载GeoIP.conf到/etc/GeoIP.conf
sudo apt-get install geoipupdate
安装好之后,需要更新的时候执行:geoipupdate -v
这样就可以自动更新了(可以定时任务执行)
参考:https://www.awaimai.com/2117.html

可以先执行php:var_dump(geoip_database_info());打印当前版本的信息,然后更新之后,再运行一次php,对比2次版本不同。

可是我们发现,/usr/share/GeoIp下面的.dat文件并没有更新,经过测试,从https://www.miyuru.lk/geoiplegacy下载最新的,然后执行:
sduo cd /usr/share/GeoIp/
sudo mkdir test
cd test
sudo wget https://dl.miyuru.lk/geoip/maxmind/city/maxmind4.dat.gz
sudo gunzip maxmind4.dat.gz
sudo wget https://dl.miyuru.lk/geoip/maxmind/city/maxmind6.dat.gz
sudo gunzip maxmind6.dat.gz
cd ../
sudo mv GeoIP.dat GeoIP.dat.bk
sudo mv GeoIPv6.dat GeoIPv6.dat.bk
sudo mv test/maxmind4.dat GeoIP.dat
sudo mv test/maxmind6.dat GeoIPv6.dat
sudo service php7.4-fpm restart
最后php执行:var_dump(geoip_database_info());似乎报错,所以就不折腾了,可能拓展安装的只有等拓展更新了才能更新数据库?有待验证

特别备注:获取ipv6的信息,要使用:
var_dump(geoip_country_code_by_name_v6(‘2601:8:be00:cf20:ca60:ff:fe09:35b5’));


分类: php学习, ubuntu高手 标签: , , , ,

php5升级到php7的一些记录

2016年10月9日 没有评论

<?php
//$mysqli=mysqli_connect($db_host,$db_user,$db_pwd,$db_name);
$mysqli=mysqli_connect($db_host,$db_user,$db_pwd);
mysqli_select_db($mysqli,$db_name);

if(!$mysqli){echo mysqli_connect_error();}

die(version_compare( mysqli_get_client_info($mysqli), “8.1.0”, “lt” ));

echo mysqli_escape_string(“select * from user where name=’gwegew'”);
die(‘xx’);

$res=mysqli_query($mysqli,’select * from xueli limit 1′);
echo “<pre>”;

/*
$array = mysqli_fetch_array($res);

var_dump($array);
foreach ($array as $val) {
echo current($val).'<br>’;
}

$finfo = mysqli_fetch_field_direct($res,1);

printf(“Name:     %s\n”, $finfo->name);
printf(“Table:    %s\n”, $finfo->table);
printf(“max. Len: %d\n”, $finfo->max_length);
printf(“Flags:    %d\n”, $finfo->flags);
printf(“Type:     %d\n”, $finfo->type);

*/
/*
$res=$mysqli->query(“INSERT INTO `xueli`
VALUES (
’24’, ‘xueli/201609/Cjaic91eUSR5zhl1308.jpg’, ‘ceshi’, ‘2’, ‘1139414400’, ‘1473091200’, ‘1475164800’, ‘网络教育’, ‘专科’, ‘兰州大学’, ‘甘肃省’, ‘建筑工程技术’, ‘网络教育’, ‘1073 0720 1606 0026 26’, ‘毕业’, ‘0408 7826 1126’, ‘1474128000’, ‘1538236800’, ‘1’
)”);
var_dump(mysqli_insert_id($mysqli));
*/

//var_dump(mysql_fetch_array($res));
//var_dump(mysqli_num_rows($res));

//关闭连接
//mysqli_close($mysqli);
//echo ‘hello’;
?>

 
int mysql_errno ([ resource $link_identifier ] )                                  int mysqli_connect_errno ( void )
int mysql_error ([ resource $link_identifier ] )                                  int mysqli_connect_error ( void )
bool mysql_close ([ resource $link_identifier = NULL ] )                          bool mysqli_close ( mysqli $link )
bool mysql_ping ([ resource $link_identifier = NULL ] )                           bool mysqli_ping ( mysqli $link )
int mysql_num_rows ( resource $result )                                           int mysqli_num_rows ( mysqli_result $result )
array mysql_fetch_array ( resource $result [, int $ result_type ] )               mixed mysqli_fetch_array ( mysqli_result $result [, int $resulttype = MYSQLI_BOTH ] )
array mysql_fetch_assoc ( resource $result )                                      array mysqli_fetch_assoc ( mysqli_result $result )
bool mysql_data_seek ( resource $result , int $row_number )                       bool mysqli_data_seek ( mysqli_result $result , int $offset )
object mysql_fetch_object ( resource $result )                                    object mysqli_fetch_object ( mysqli_result $result [, string $class_name = “stdClass” [, array $params ]] )
array mysql_fetch_row ( resource $result )                                        mixed mysqli_fetch_row ( mysqli_result $result )
int mysql_num_fields ( resource $result )                                         int mysqli_num_fields ( mysqli_result $result )
array mysql_fetch_lengths ( resource $result )                                    array mysqli_fetch_lengths ( mysqli_result $result )
int mysql_get_proto_info ([ resource $link_identifier ] )                         int mysqli_get_proto_info ( mysqli $link )
bool mysql_field_seek ( resource $result , int $field_offset )                    bool mysqli_field_seek ( mysqli_result $result , int $fieldnr )
string mysql_get_client_info ( void )                                             string mysqli_get_client_info ( mysqli $link )
string mysql_get_host_info ([ resource $link_identifier ] )                       string mysqli_get_host_info ( mysqli $link )
string mysql_info ([ resource $link_identifier ] )                                string mysqli_info ( mysqli $link )
bool mysql_set_charset ( string $charset [, resource $link_identifier = NULL ] )  bool mysqli_set_charset ( mysqli $link , string $charset )
bool mysql_free_result ( resource $result )                                       void mysqli_free_result ( mysqli_result $result )
mysql_db_name           SELECT DATABASE()
mysql_list_tables       SHOW TABLES FROM dbname
mysql_unbuffered_query
mysql_pconnect               mysqli_connect
mysql_connect                mysqli_connect

string mysql_escape_string ( string $unescaped_string )                           string mysqli_escape_string ( mysqli $link , string $escapestr )
string mysql_real_escape_string ( string $unescaped_string )                      string mysqli_real_escape_string ( mysqli $link , string $escapestr )
string mysql_get_server_info ([ resource $link_identifier ] )                     string mysqli_get_server_info ( mysqli $link )

int mysql_affected_rows ([ resource $link_identifier = NULL ] )                   int mysqli_affected_rows ( mysqli $link )
bool mysql_select_db ( string $database_name [, resource $ link_identifier ] )    bool mysqli_select_db ( mysqli $link , string $dbname )
int mysql_insert_id ([ resource $link_identifier = NULL ] )                       mixed mysqli_insert_id ( mysqli $link )
mixed mysql_query ( string $query [, resource $link_identifier = NULL ] )         mixed mysqli_query ( mysqli $link , string $query [, int $resultmode = MYSQLI_STORE_RESULT ] )

mysql_result

object mysql_fetch_field ( resource $result [, int $field_offset = 0 ] )          mixed mysqli_fetch_field_direct ( object $result , int $fieldnr )
mysql_field_flags
mysql_field_len
mysql_field_name
mysql_field_table
mysql_field_type

PHP 7.0 安装使用与性能监测!

2016年1月5日 没有评论

PHP 7.0 安装使用与性能监测!

PHP 7.0发布,网上关于新版的介绍很多,介于 7.0 在正式发布之前已经发过若干个 Beta、8个 RC,应该不会出现重大问题。今日我将一台机器升级至 PHP 7.0 并将有关信息记录如下。

本人使用 Ubuntu 12.04 LTS,在网上已经找到 7.0 正式版的 ppa,所以不需要编译,使用如下命令可直接安装。

安装 PHP7.0与扩展

sudo add-apt-repository ppa:ondrej/php-7.0
sudo apt-get update
sudo apt-get install php7.0-fpm php7.0-cli php7.0-common php7.0-json php7.0-mysql php7.0-opcache php7.0-curl

由于 Memcached、Redis 扩展并没有在 pecl 发布支持 PHP7 的最新版本,所以需要到 Github 找到 PHP7 的分支进行手动编译安装。

redis、memcached的github地址如下
https://github.com/phpredis/phpredis/
https://github.com/rlerdorf/php-memcached

Redis 安装方法

git clone https://github.com/phpredis/phpredis/
cd phpredis
git checkout php7
phpize
./configure
make
ssudo make install

Memcached 安装方法

Memcached 需要先下载 libmemecached 库才能正常编译。

wget https://launchpad.net/libmemcached/1.0/1.0.18/+download/libmemcached-1.0.18.tar.gz
tar -zxvf libmemcached-1.0.18.tar.gz
cd libmemcached-1.0.18
./configure
make
sudo make install
sudo apt-get install pkg-config
git clone https://github.com/rlerdorf/php-memcached.git
cd php-memcached
git checkout php7
phpize
./configure
make
sudo make install

自己编译的这2个扩展需要手动在配置文件里加载

sudo touch /etc/php/mods-available/redis.ini
sudo touch /etc/php/mods-available/memcached.ini

并将两个文件内容写上

extension=redis.so
extension=memcached.so

cd /etc/php/7.0/fpm/conf.d
sudo ln -s /etc/php/mods-available/redis.ini ./
sudo ln -s /etc/php/mods-available/memcached.ini ./

如果命令行下需要启用扩展,同样需要在 cli/conf.d 目录下将其链接过去。
最后重启服务器

sudo service php7.0-fpm restart

配置文件的调整
由于 PHP7.0 最大的改进是性能,所以务必要启用 opcache 保证其能发挥最大作用。
将 php.ini 的如下配置启用。

opcache.enable=1
opcache.enable_cli=1
opcache.file_cache=/tmp
opcache.error_log=/var/log/opcache_errors.log

ppa 安装的包默认 error_display 是 off 的。 而且 error_log 是注释的,意味着出现问题时查看不到任何信息。
因此请写入如下配置

error_log=/var/log/php_errors.log
sudo chown www-data.www-data /var/log/php_errors.log

本人安装的是 Nginx 服务器,请确保用户数组更改为与自己 webserver 一样的,否则还是不会出现任何提示。 opcache_errors.log 文件同样如此。

关于 opcache 的更多内容可以访问这里查看 http://www.laruence.com/2015/12/04/3086.html

异常处理与解决

在配置完成后,就需要实际的将程序跑一下了。目前将老系统转移到 EN PHP7.0 后,第一个错误就是

09-Dec-2015 12:27:48 Asia/Chongqing] PHP Fatal error: Uncaught Error: Call to undefined function set_magic_quotes_runtime() in /init.php:46

已经不再存在set_magic_quotes_runtime 这个函数了。如果要兼容的话需要加上判断

if(PHP_VERSION_ID &amp;amp;amp;lt; 70000){
set_magic_quotes_runtime();
}

监控与调优

我在系统里安装了 OneAPM 提供的 Agent。这样可以实时监测到整个系统的运行情况。其他版本的 Agent 官方网站已经提供了下载。截止本文落笔,PHP 7.0版本官方提供了一个下载地址是:https://oneapm.kf5.com/attachments/download/366552/0015667f0036f47c827fcb8fcbfbc79/

在这之前更多人会使用 xhprof 来检测和优化系统,但是 xhprof 对整体的程序性能采集样本无法很好的归纳,也没有很好的可视化曲线图和 Web 事务跟踪,导致在短时间内很难对系统瓶颈进行评估。

所以我使用 OneAPM 的 PHP Agent 来完成这些工作,OneAPM 同样使用定时采样定时汇报的方式来收集性能信息,并且官方宣称耗费资源小于5%。不过对于使用性能提升数倍的 PHP7.0 来部署的话这些损耗可以忽略不计,而且本人只在集群若干机器内部署了一台。

下面介绍基本的性能分析和故常排查方法。

PHP 7.0 安装使用与性能监测!

比如可以在 dashboard 中查看到具体某个时间段整个系统的稳定程度,我们在图上看到了一个异常波峰,时间在早上6点左右,通过列表筛选器移除 WEB External 后看图。

PHP 7.0 安装使用与性能监测!

其他业务都很正常,执行到最后 PHP 层,平均时间也只用了 10ms 左右。回到上图点击波峰的指示器可以看到具体明细。

当打开详情时可以明显看到,原来是微信的接口在6点钟抽了。同样该页面还可以监控到第三方服务调用的响应情况。比如 217ms 的 api.hitokoto.us 服务。

再简单看一个 SQL 缓慢的监控。

PHP 7.0 安装使用与性能监测!

通过 Web 事务的响应时间占比查看到一个脚本执行时间相对过长,通过上图可以看到数据库查询占了579ms

PHP 7.0 安装使用与性能监测!

通过切换到详情页面,可以看到整个脚本的调用过程,最终发现是程序 mysqli.php:88 行执行的查询占用了过长的时间。

以上只是通过 OneAPM 持续检查程序稳定性的一个基本方法。

程序在日常运行中由于受到的访问量不同,很有可能在某个时间点上出现大面积的延迟,比如并发突然增高或访问某一部分接口的比例突然过高,而平时 Apdex 指标却看起来非常漂亮,那么这个时候通过 OneAPM 就很容易发现程序中影响性能的部分,从而继续改进或优化代码。

分类: php学习 标签:

PHP 7.0.0 Beta 2 Released(php 7.0 beta2发布啦)

2015年7月24日 没有评论

The PHP development team announces the immediate availability of PHP 7.0.0 Beta 2. This is the fourth pre-release of the new PHP 7 major series. All users of PHP are encouraged to test this version carefully, and report any bugs and incompatibilities in the bug tracking system.
THIS IS A DEVELOPMENT PREVIEW – DO NOT USE IT IN PRODUCTION!

PHP 7.0.0 Beta 2 contains fixes for 28 reported bugs and altogether over 200 commits with various improvements.

PHP 7.0.0 comes with new version of the Zend Engine with features such as (incomplete list):

Improved performance: PHP 7 is up to twice as fast as PHP 5.6
Consistent 64-bit support
Many fatal errors are now Exceptions
Removal of old and unsupported SAPIs and extensions
The null coalescing operator (??)
Combined comparison Operator (<=>)
Return Type Declarations
Scalar Type Declarations
Anonymous Classes

For more information on the new features and other changes, you can read the NEWS file, or the UPGRADING file for a complete list of upgrading notes. These files can also be found in the release archive.

For source downloads of PHP 7.0.0 Beta 2 please visit the download page, Windows source and binaries can be found on windows.php.net/qa/.

The next release will be Beta 3, which is to be released on the 6th of August. You can also read the full list of planned releases on our wiki.

Thank you for helping us make PHP better.

分类: php学习 标签:

PHP 7.0.0 Beta 1 Released 发布啦。

2015年7月13日 没有评论

php7 beta1发布了,看来php7不远了。

The PHP development team announces the immediate availability of PHP 7.0.0 Beta 1. This is the third pre-release of the new PHP 7 major series. All users of PHP are encouraged to test this version carefully, and report any bugs and incompatibilities in the bug tracking system.
THIS IS A DEVELOPMENT PREVIEW – DO NOT USE IT IN PRODUCTION!

Beta 1 marks the feature complete phase. From now on, fundamental changes are not to be expected. What’s more, this release brings over 200 commits with about 25 reported bug fixes, as well as security, stability and other improvements. However it was delayed to catch up with the latest OpenSSL release issued on July 9th.

PHP 7.0.0 comes with new version of the Zend Engine with features such as (incomplete list):

Improved performance: PHP 7 is up to twice as fast as PHP 5.6
Consistent 64-bit support
Many fatal errors are now Exceptions
Removal of old and unsupported SAPIs and extensions
The null coalescing operator (??)
Combined comparison Operator (<=>)
Return Type Declarations
Scalar Type Declarations
Anonymous Classes

For more information on the new features and other changes, you can read the NEWS file, or the UPGRADING file for a complete list of upgrading notes. These files can also be found in the release archive.

For source downloads of PHP 7.0.0 Beta 1 please visit the download page, Windows source and binaries can be found on windows.php.net/qa/.

The next release will be Beta 2, which is to be released on the 23rd of July. You can also read the full list of planned releases on our wiki.

Thank you for helping us make PHP better.

 

 

PHP 7.0.0 Beta 1 发布,此版本属于功能完善阶段,从现在开始不会发生根本性改变。此版本包括超过 200 个 commits,解决了 25 个报告的 bug,还有一些安全性,稳定性方面的改进。比计划中晚了一天发布,主要是为了 OpenSSL 的最新版本。

PHP 7.0.0 包含最新版本的 Zend Engine,包括以下特性:

提升性能:PHP 7 速度是 PHP 5.6 的两倍

支持 64 位

许多重大错误可以进行异常处理

移除了旧的和不支持的 SAPIs 和扩展

null 合并操作符(??)

结合比较运算符 (<=>)

标量类型声明

匿名类

更多内容请看 NEWS file 或者 UPGRADING file。

PHP 7.0.0 Beta 1 源代码下载,Windows 平台源代码和二进制提供在 windows.php.net/qa/。

下一个版本是 PHP Beta 2,计划在 7 月 23 日发布。

今天同时还发布了 PHP 5.6.11,PHP 5.5.27 和 PHP 5.4.43,这三个版本主要是 CVE-2015-3152 安全修复。下载和详细改进请看发行说明。

分类: php学习 标签:
css.php