我正在使用https://launchpad.net/~ondrej/+archive/ubuntu/php提供的最新PHP软件包.
当我构建并安装OCI8扩展时,一切看起来都是有序的,但是尽管在PHP-FPM配置中启用了扩展,但它的存在并没有反映在输出中phpinfo().
以下Gist详细介绍了我用于配置,构建和安装OCI8 PHP扩展的确切过程:
https://gist.github.com/cbj4074/fa761f60b6f8db431539d76ebfba828e
完全相同的流程和配置在Ubuntu 16.04 LTS上工作得非常好,所以看起来在Ubuntu 18.04 LTS上有一些根本的区别,无论是操作系统还是有问题的PHP包.
作为一个重要的(我怀疑与此问题相关)背景信息,在Ubuntu 18.04 LTS上,扩展无法在开箱即用的CLI环境中加载,错误如下:
PHP警告:PHP启动:无法加载动态库'/usr/lib/php/20160303/oci8.so' - libmql1.so:无法打开共享对象文件:第0行的未知中没有此类文件或目录
我这样解决了这个问题:
# echo 'LD_LIBRARY_PATH="/opt/oracle/instantclient_12_2"' >> /etc/environment
Run Code Online (Sandbox Code Playgroud)
我认为也许添加LD_LIBRARY_PATH到PHP-FPM环境配置可能会解决那里的等效问题:
# echo "env['LD_LIBRARY_PATH'] = /opt/oracle/instantclient_12_2" >> /etc/php/7.2/fpm/pool.d/www.conf
# systemctl restart php7.2-fpm
Run Code Online (Sandbox Code Playgroud)
这确实导致LD_LIBRARY_PATH值,符合规定,要体现在两者Environment的部分phpinfo()(当通过PHP-FPM + NGINX呈现并从一个浏览器请求),并且PHP Variables部分,如$_SERVER['LD_LIBRARY_PATH'].
奇怪的是,即使设置了PHP-FPM的日志记录debug,我也没有看到libmql1.so我使用CLI遇到的任何错误跟踪.OCI8扩展无法以静默方式加载.display_startup_errors = On在PHP-FPM中也是有效的php.ini.
我当选,看看是否OCI8扩展在Apache的工作,在同一台服务器上,它本身,提供我补充export LD_LIBRARY_PATH=/opt/oracle/instantclient_12_2到/etc/apache2/envvars; 在absense中,Apache在创业时抱怨:
PHP警告:PHP启动:无法加载动态库'oci8.so'(试过:/usr/lib/php/20170718/oci8.so(libmql1.so:无法打开共享对象文件:没有这样的文件或目录),/ usr/lib/php/20170718/oci8.so.so(/usr/lib/php/20170718/oci8.so.so:无法打开共享对象文件:没有这样的文件或目录))在第0行的Unknown中
LD_LIBRARY_PATH在Ubuntu 16.04 LTS上,根据我的观察以及有关/sf/answers/3166972791/的评论,在Ubuntu …
自动递增整数不能用于存在潜在冲突(冲突)的分布式数据库拓扑中的主键。
关于 UUID 与自动递增整数主题的现有文献非常多,基本原则已被广泛理解。然而,与此同时,似乎没有关于如何在 Laravel 中实现这一点的单一、全面的解释,支持 Eloquent 模型和关系。
下面的文章很有价值,它解释了将主键存储在VARCHAR(36)/CHAR(36)与通常用于自动递增键的 4/8 字节整数中所产生的性能开销。我们应该注意这个建议(尤其是作者在全文中指出的出版后更正):
https://tomharrisonjr.com/uuid-or-guid-as-primary-keys-be-careful-7b2aa3dcb439
同样有价值的是来自讨论的评论,它是广泛的:
https://news.ycombinator.com/item?id=14523523
下面的文章解释了如何在 Laravel Eloquent 模型中使用 UUID 实现主键,但它没有解释如何为 Eloquent 关系实现相同的主键,例如“数据透视表”的多对多(按照 Laravel 的说法)。
https://medium.com/@steveazz/setting-up-uuids-in-laravel-5-552412db2088
其他人也问过类似的问题,例如Laravel eloquent UUID in a pivot table,但在那种情况下,提问者正在使用 MySQL 触发器生成要插入到数据透视表中的 UUID,我宁愿避免使用纯粹的-雄辩的方法。
How To Cast Eloquent Pivot Parameters? 中提出了另一个类似的问题?,但问题的关键是如何转换枢轴属性,而不是如何在附加或同步关系时为 ID 列生成自定义值。
需要明确的是,我们可以通过将可选的数组参数传递给attach()方法来轻松实现这一点:
->attach($modelAId, $modelBId, ['id' => Uuid::generate()]);
Run Code Online (Sandbox Code Playgroud)
但是每次我们调用attach()任何一个模型时都需要这样做,这很麻烦并且违反了 DRY 原则。
我们会更好地使用在模型类本身中实现的事件驱动方法。
这种方法会是什么样子?
我正在努力并排安装 PHP 5.6 和 7.0,以方便从 PHP 5 迁移到 7。
我正在使用 Ond?ej Surý 的 Ubuntu PPA,https: //launchpad.net/~ondrej/+archive/ubuntu/php ,它提供了 PHP 5.6 和 7.0 的可共同安装版本。
这两个 PHP 版本可以完美地并行工作,但有一个障碍:我无法mysql为 PHP 5.6构建扩展(即使我能够为 7.0 构建它)。
(我很清楚该mysql扩展已经过时,应该放弃它以支持更现代的替代方案。然而,我期望那些遗留应用程序依赖它的客户在 PHP 5.6 仍然存在的时候重构他们的代码是不合理的支持。所以,我在这件事上别无选择......)
对于不熟悉这个可共同安装的 PPA 的人,版本号会附加到二进制文件中,因此各种 PHP 可执行文件的路径如下:
# ls -lah /usr/bin | grep "php"
-rwxr-xr-x 1 root root 13K Dec 31 03:24 dh_php
lrwxrwxrwx 1 root root 21 Feb 23 09:51 php -> /etc/alternatives/php
-rwxr-xr-x 1 root root 3.6M Feb 23 06:37 php5.6
-rwxr-xr-x …Run Code Online (Sandbox Code Playgroud)