首页 > 编程技术 > php

Strict Standards: Only variables should be passed by reference in

发布时间:2016-11-25 17:38

本文章来给大家介绍Strict Standards: Only variables should be passed by reference in解决办法,各位朋友可参考。

php中使用内置的reset函数可以获取array的第一个元素的值。例如:

 代码如下 复制代码

$arr = array('one', 'two', 'three');

echo reset($arr);  

// 输出的结果为 one对于下述代码,如果php开启了"Strict Standards",将会看到"Strict Standards: Only variables should be passed by reference in"的提示。

 代码如下 复制代码

$str = 'netingcn.com';

echo reset(explode('.', $str));

为什么会这样呢?可以先看看reset函数的定义:

function reset (array &$array) {}从定义中可以看到,reset接受的参数是一个array的引用。而上述代码中explode返回值不是任何array的引用,所以在"Strict Standards"下会有上述提示。解决办法很简单,只需要把reset(explode('.', $str))分两步写即可。第一步先把explode的返回值赋给一个变量,第二步把这个变量作为reset参数。

出现上面的提示的不只是reset函数,只要参数接受的是对象引用,而传值直接使用function返回值都会看到那样的提示。例如内置的array_pop、shuffle、curent、next、prev、next等等

今天白天才架起PHPStorm+xdebug的调试环境,就遇到了各式各样的问题:访问超慢响应、访问超快响应但是是空白页。

 

问题A解决的方法很多,总归还有解决办法;问题B我估计是线程问题,也许可以通过调试php.ini的配置搞定,也许不是,很难讲清楚,线程的问题可能要跟xdebug的版本扯上关系。


解决方式
 

PHP.ini 找到memory_limit参数,增大!

 

换一个浏览器!我之前一直用Google Chrome调试程序,之后就开始变慢下来,直到每个页面变成6秒才加载完毕,已经忍无可忍。换成了Firefox、IE均没有这个问题。 (这个方法很好用,还能立刻见效!)

 

使用 xdebug.profiler_enable_trigger配置,有选择的运行xdebug功能探查程序。

 

xdebug.remote_host 的值最好跟你服务器的IP一致,比方说你是通过localhost访问,则这里写localhost,你是127.0.0.1访问,就写127.0.0.1

 

看看你的xdebug.profiler_output_dir目录是否已经达到几G了?(一套电商程序很可能在持续开发十几个小时后,xdebug.profiler_output_dir目录的xdebug文件达到好几G!)

 

平时不需要的时候,最好关闭xdebug!
xdebug.remote_enable = 0
xdebug.profiler_enable = 0
xdebug.remote_autostart = false
最后,一句话:DON’T RUN XDEBUG ON PRODUCTION.

php 中使用memcached扩展来访问memcached时,当memcached服务器无法正常连接,在默认设置下会造成请求响应变慢。注意:无法正常连接指网络故障,如两台服务器无法进行通信等,只要能ping通,就算memcached服务没有开启或down掉,不会影响响应时间,只是memcached没有启作用。

设置timeout时间通过常量Memcached::OPT_CONNECT_TIMEOUT来控制,默认是4000毫秒(php 官网显示1000,我测试版本1.0.2和2.0.1都是4000)。另外1.0.2和2.0.1还有很大差别。1.0.2在执行addServer时就会连接memcached服务器,而且执行命令时候需要2倍的timeout时间,所有当memcached无法连接时候,花费时间是3倍的timeout时间。

2.0.1在php 5.2中似乎有bug,无法使用,具体参看:https://bugs.php.net/bug.php?id=61283。

本文章来给各位同学介绍Windows 平台的 PHP 报错 Fatal error: Class \'COM\' not found in 的解决方法,有需要了解的朋友可参考。


然在 Win Server 08 往上搭载的 IIS 跑 php 性能提升不少,但还是觉得不太舒服。。。

某日在调试一个win上的php生产环境时,一段php代码返回了错误:

Fatal error: Class 'COM' not found in XXXXXXXXX
1 Fatal error: Class 'COM' not found in XXXXXXXXX

没发现 COM 类,php代码主要是调用一些系统的信息,初想应该是php没配置好,在stackoverflow找到答案,是讨论xampp的,要延伸开来,我加了几个要点:

★ php 根目录的 ext 文件夹下确保存有 php_com_dotnet.dll 这个文件

★ php.ini 确保有此语句

[PHP_COM_DOTNET]
extension=php_com_dotnet.dll
1
2 [PHP_COM_DOTNET]extension=php_com_dotnet.dll

★ 开始 > 运行 > services.msc 回车 > 确保 COM+ Event System 的服务开启

在 PHP 5.4.5 版本之前是内置的,但往后版本中分离了。。。

今天在使用phpwind9.0时发现安装它时居然需要安装pdo_mysql这个组件了,这个个人认为是一个脑残的做法,现在有多少站长是空间怎么可能权限来修改php.ini配置呢,为phpwind团队做出这样的做法感觉无奈

下面我来介绍一些办法,这些都是有服务器操作权限的朋友可参考下面办法。

常见错误:
1.pdo_mysql未安装

解决方法:

修改本地php.ini配置,以Win下的php为例,

找到

 代码如下 复制代码

;extension=php_pdo_mysql.dll
;extension=php_pdo.dll

修改成

;extension=php_pdo_mysql.dll
;extension=php_pdo.dll

去除前面的分号“;”。重启apache服务即可。

linux服务器处理办法

lanmp可以试着改一下php.ini

 代码如下 复制代码

extension_dir = /www/wdlinux/apache_php-5.2.17/lib/php/extensions/no-debug-non-zts-20060613/
extension=pdo.so
extension=pdo_mysql.so

测试后发现无效!

开始重新pdo_mysql的安装,需要用Xshell一类的软件登陆服务器进行设置

步骤:

1. cd lanmp //移动到安装包目录下
  2. tar zxvf PDO_MYSQL-1.0.2.tgz //解压安装包
  3. cd PDO_MYSQL-1.0.2 //进入解压后安装目录
  4. /www/wdlinux/php/bin/phpize //查询环境版本
  5. ./configure –with-php-config=/www/wdlinux/php/bin/php-config –with-pdo-mysql=/www/wdlinux/mysql //编译前测试配置
  6. make //编译安装包
  7. make install //安装
  安装后重启:service httpd restart   和  service nginxd restart
  然后再次安装phpwind9.0即可解决问题!
  此方法可以解决:wdcp环境VPS,阿里云服务器的配置中出现pdo_mysql未安装和数据库连接失败could not find driver的问题!

标签:[!--infotagslink--]

您可能感兴趣的文章: