问题标签 [php-7]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
php - 变量处理顺序:PHP 7 中的变化
随着新的 PHP 7.0.0 的发布,我有点担心所谓的“变量”的评估顺序的变化。
在此页面上,在“变量处理的更改”下,显示了一个表格,其中包含表达式示例及其在 PHP 5 和 PHP 7 中的处理顺序。列出的四个表达式是:
给定以下字符串和数组:
表中的第一个表达式在$$foo['bar']['baz']
PHP 5 中被解释为一个名为 in 的变量的值$foo['bar']['baz']
,因此是 的值$qux
,即 'quux'
。
但是,据我了解,在 PHP 7 中,相同的表达式将被解释为名为 in 的值的变量$foo
,因此我希望 PHP 通知用于“数组到字符串转换”,因为$foo
它是一个数组。
表中的其他示例似乎是同一主题的变体。
当然我很好奇为什么在 PHP 7 中改变了这一点(具体来说,为什么这个改变比向后兼容更重要),但是,这对于 SO 来说不是一个合适的问题。我的问题更实际:
应对这种不兼容性的推荐方法是什么?
当然,在有问题的表达式中添加花括号会有所帮助(${$foo['bar']['baz']}
、、$foo->{$bar['baz']}
和) $foo->{$bar['baz']}()
,Foo::{$bar['baz']}()
但这非常麻烦,要遍历大量旧代码,搜索相对较少的出现...
否则,这四个示例是唯一可能的语法变化吗?也就是说,我可以创建一个正则表达式和grep
所有有问题的代码吗?可能存在哪些其他变体?
php - PHP7 中的 foreach 更改
foreach
默认情况下,在 PHP7 中,按值迭代时,根据:http ://php.net/manual/en/migration70.incompatible.php 对数组的副本进行操作
它是否仅在对数组或值进行更改时才懒惰地创建副本,或者它总是会创建副本并且本质上使循环引用成为性能优化?
另外,对象数组是否仍然循环/给你对象的引用?还是他们实际上也会为 对象创建副本foreach
并按值返回对象?
php - php perl 跨平台编码器/解码器
以前是 perl 编码器
可以通过 php 函数很好地解密
唉,mcrypt_cbc 现在不仅被弃用了,它也完全从 php7 中消失了。
perl 中是否有标准的新 php 解码器 mcrypt_encrypt 可以使用的推荐编码器?
为了我的目的,我不需要超级秘密。合理的秘密是可以的。没有生死攸关的秘密。如果解码需要半个小时,那已经足够了。理想情况下,我会使用任何规范的安全编码器解码器(当然,只要它们兼容)。
建议表示赞赏。
php - PHP7 认证
随着 PHP 7 的发布,我应该申请 PHP 5 认证还是更好地等待,直到 PHP 7 认证发布/宣布?Zend 对此认证有什么计划?
php - PHP7 + Symfony 2.8,无法写入会话数据
我自己编译了php7(974f6c2a705)。如果我使用 symfony 运行 php7 + php-fpm + nginx,我会收到此错误:
(使用 snc redis 包进行会话:)
(使用本机会话支持:)
问题似乎与 symfony 相关,因为 php 具有对该文件夹的读/写权限。
如果我只运行这段代码,它就可以工作:
为什么 symfony 无法编写会话的任何建议或想法?
apache - PHP7 安装破坏了我的本地主机
我在本地编译和构建了 PHP7。php -v
输出我想要的所有美丽信息。不过,我完全无法将它加载到 apache 中。configure\make 过程主要是我自己和 SO,但是为了将其加载到 Apache,我按照此博客中的步骤操作,从
完成后,您需要设置 Apache 以使用新版本的 PHP。以下行将禁用原始 PHP5 版本并启用新的 PHP7 版本
这就是事情变得糟糕的地方。真的,它所完成的只是完全破坏了本地的 php。由于某种原因,我什至无法成功回滚我的配置。phpinfo() 只显示源代码,因此根本不处理 php。
现在的情况: PHP 已经死了。
我想去的地方: Apache2 加载 PHP7
帮助,有人吗?非常感激!
php - PHP 7 用户会话问题 - 无法初始化存储模块
在 PHP 7.0 中使用各种 PHP 框架会话驱动程序时存在错误。我最初在使用 CodeIgniter 数据库驱动程序时遇到了这个问题,并认为这是一个 CodeIgniter 问题,但后来在多个会话驱动程序和多个框架上遇到了这个问题。在这一点上,我已经安全地得出结论,会话驱动程序的类型无关紧要 - 看似随机,应用程序将崩溃并且日志(我已经尝试过 Apache 和 php-fpm + nginx)填充以下内容:
PHP 致命错误:session_start():无法初始化存储模块:用户(路径:[无论我在 php.ini 路径中有什么])
我使用的驱动程序不使用 php.ini 中设置的值,无论我是否将 session.save_handler 设置为 php.ini 中的文件、redis 等,也无论我设置的路径如何(如果是 redis,则为 Redis 服务器,完全-启用文件的可写文件夹)发生错误。除非在框架外的 php 文件中调用本机“session_start()”,否则不应点击此处的路径。此外,在框架之外调用“session_start()”也可以正常工作......所以很明显 PHP 可以访问该路径。就好像在某个时候,会话驱动程序变成了框架驱动程序和 php.ini 中设置的任何内容的混合体。错误消息总是有 session.save_handler 的“用户”,所以很明显这不是从 php.ini 中提取的……但路径是。为什么会发生这种情况?这是在您体验之前很难描述的问题之一......而且很难重现,因为即使在数百次会话中一切似乎都可以正常工作(直到它突然停止工作)。重新启动 Apache 也不能解决问题 - 这里有很多问题,我最终只是重新启动机器以避免停机。显然,PHP 7 机器现在将从负载均衡器轮换中退出......但我希望现在能解决问题。重新启动 Apache 也不能解决问题 - 这里有很多问题,我最终只是重新启动机器以避免停机。显然,PHP 7 机器现在将从负载均衡器轮换中退出......但我希望现在能解决问题。重新启动 Apache 也不能解决问题 - 这里有很多问题,我最终只是重新启动机器以避免停机。显然,PHP 7 机器现在将从负载均衡器轮换中退出......但我希望现在能解决问题。
我遇到了我自己编译的 PHP 7.0 RC5、RC6 和 RC8 以及 Ubuntu 15.10 Wily (7.0.0-2+deb.sury.org~wily+1) 上最新的 Ondřej Surý PPA 的问题。我在 CodeIgniter 和 Symfony 上遇到过这个问题,并且无论框架中使用的驱动程序类型(文件、数据库、redis)或 php.ini 中设置的 session.save_handler (同样应该无关紧要)都遇到过这个问题在这里,但只是认为应该提及)。我不断尝试组合并在野外扔东西,这个问题每次都会发生(有时需要 12 多个小时,具体取决于网站的流量)。
感谢您的任何帮助,您可以提供!我愿意接受建议,并愿意在这一点上尝试任何事情。
windows - PHP7 Curl 和 OpenSSL 扩展不适用于 Windows 上的 Apache 2 处理程序
在 Apache2.2 模块处理程序模式下从 PHP7 初始化 curl 和 openssl 扩展时遇到问题。
如果我使用 FCGI 模式,PHP7 中的 curl 和 openssl 工作得很好,我可以在 phpinfo 页面中看到它们。
我检查了 curl 和 openssl php 扩展的依赖关系,发现它们动态链接到 libssh2.dll。然后尝试将 libssh2.dll 添加到路径,系统路径,但这仍然不起作用。
所以猜测 Apache2.2 可能是一个问题,因为 PHP7 的 curl 和 openssl 扩展在 FCGI 模式下启动时工作正常。有没有办法用 ollydbg 或 windbg 来检查?
php - PHP XDEBUG 未启用
无法启用 XDEBUG。任何帮助或检查它是否已启用且未反映?我在 PHP7 上并且正在使用 Xdebug 2.4.0rc2。PHP.INI 设置如下:
无法启用它。这些步骤是正确的,但也没有显示在 phpinfo() 中。