升级到 php8 后,我遇到了一个问题php-cs-fixer,我通过Composer全局安装。现在我无法使用,php-cs-fixer因为每次我得到:
PHP needs to be a minimum version of PHP 5.6.0 and maximum version of PHP 7.4.*.
To ignore this requirement please set `PHP_CS_FIXER_IGNORE_ENV`.
Run Code Online (Sandbox Code Playgroud)
对于 php 升级和使用不同版本的 php,我使用https://github.com/shivammathur/homebrew-php
对于以前版本的 php (7.4),一切正常。
让我们有一个简单的 PHP 脚本
<?php
var_dump("php" == 0);
Run Code Online (Sandbox Code Playgroud)
根据官方文档(https://www.php.net/manual/en/types.comparisons.php),这应该评估为true
但 对于 PHP <=7.4 来说确实如此,但对于 PHP 8.0 则不然
在当前版本的 PHP 8 (8.0.0 - 8.0.2) 中,它的计算结果为false.
此功能是否有任何未记录的更改或者这是一个错误?或者我错过了什么?
谢谢
以下返回字符串长度为零:
<?php
print_r(ini_get('short_open_tag'));
?>
Run Code Online (Sandbox Code Playgroud)
在两台 PHP 8 服务器(apache2handler 和 cgi-fcgi)上,我需要知道是否启用了短标签,因为它会与 XML 产生冲突。我无法停下手中的一切去看看phpinfo()。
这段代码在两台服务器上的 PHP 7.4 中都运行得很好。现在,我确实知道短标签已被禁用,尽管我需要能够在服务器升级后快速知道。
我怎样才能ini_get('short_open_tag')重新开始工作?
我正在从 PHP 7.4 升级到 PHP 8,突然这个错误出现在我的 cURL 请求中:
Fatal error: Uncaught ValueError: curl_setopt_array(): Argument #2 ($options) contains an invalid cURL option in ...
Run Code Online (Sandbox Code Playgroud)
我使用以下代码来构建curl:
$options = array (
"CURLOPT_POST" => true,
"CURLOPT_HEADER" => true,
"CURLOPT_URL" => "https://example.example.com/api/example.php",
"CURLOPT_FRESH_CONNECT" => true,
"CURLOPT_RETURNTRANSFER" => true,
"CURLOPT_FORBID_REUSE" => true,
"CURLOPT_TIMEOUT" => 10,
"CURLOPT_FAILONERROR" => true,
"CURLOPT_POSTFIELDS" => $this->buildPostFields($postData),
"CURLOPT_HTTPAUTH" => "CURLAUTH_BASIC",
"CURLOPT_SSL_VERIFYPEER" => false //REMOVE IN PRODUCTION, IGNORES SELFSIGNED SSL
);
$ch = curl_init();
curl_setopt_array($ch, $options);
Run Code Online (Sandbox Code Playgroud)
目标文件始终是 php 扩展名。'buildPostFields' 返回数据数组。
可能出现此错误是因为我的 php 升级到版本 …
为什么我在执行匹配表达式时遇到错误:
$number = '1';
$result = match($number) {
1 => 'one',
2 => 'two',
3, 4 => 'three or four',
};
echo $result;
Run Code Online (Sandbox Code Playgroud)
致命错误:未捕获 UnhandledMatchError:未处理的字符串类型匹配值
我正在尝试在我的 ubuntu 虚拟机上安装 php8.0,但失败得很严重。我一直在关注无数的教程,比如这个,但是当我尝试运行sudo apt install php8.0-fpm(我必须使用 nginx)时,我在这里停止了。
我得到的是以下错误:
Reading package lists... Done
Building dependency tree
Reading state information... Done
Some packages could not be installed. This may mean that you have
requested an impossible situation or if you are using the unstable
distribution that some required packages have not yet been created
or been moved out of Incoming.
The following information may help to resolve the situation:
The following packages have unmet dependencies:
php8.0-common : …Run Code Online (Sandbox Code Playgroud) 我刚刚升级了brew..
brew update // or brew upgrade ..
Run Code Online (Sandbox Code Playgroud)
突然,我的 MacBook 上安装了 php 8。
之后,Laravel 代客就不起作用了..
我想知道是否必须删除 php8 并重新安装 php 7.x 。
或者也许我可以知道如何解决这种情况..
通常使用 Laravel 7/8。
有人可以帮忙吗?
我在我的 Dockerfile 中添加了以下代码
RUN echo -e "http://nl.alpinelinux.org/alpine/v3.13/main\nhttp://nl.alpinelinux.org/alpine/v3.13/community" > /etc/apk/repositories;
RUN apk add --no-cache gd;
Run Code Online (Sandbox Code Playgroud)
我运行了命令
docker-compose build
Run Code Online (Sandbox Code Playgroud)
构建成功,但是当我重新启动 docker php8 映像时,我仍然收到错误 - 找不到 GD 模块。
我在 php.ini 文件中启用了 GD 扩展
,但收到此错误
我正在将项目升级到 PHP 8.1 版本。以下两个函数面临警告并导致性能低下。第一个功能:
/**
* @param $a
* @param $b
* @return float
*/
public static function div($a, $b)
{
return (int) ~~($a / $b);
}
Run Code Online (Sandbox Code Playgroud)
第二个功能:
/**
* @param $a
* @param $b
* @return mixed
*/
public static function mod($a, $b)
{
return (int) $a - ~~($a / $b) * $b;
}
Run Code Online (Sandbox Code Playgroud)
我的警告:
Implicit conversion from float 1.0833333333333333 to int loses precision
Run Code Online (Sandbox Code Playgroud)
示例使用的函数:
public static function d2g($jdn)
{
$j = 4 * $jdn + 139361631;
$j += …Run Code Online (Sandbox Code Playgroud) 我维护了一个网站,不久前用 PHP 编写。它的大多数功能依赖于返回错误,而不是捕获异常。像这样的东西:
(注意:在 PHP 的早期版本中这是完全可以接受的行为。)
$tbl_nm = "table_name";
$link = @mysqli_connect($HOSTNAME, $USERNAME, $PASSWD);
if($link !== false)
{
if(@mysqli_select_db($link, $DBNAME))
{
$query = "CREATE TABLE `".$tbl_nm."` (".
$COL_ID." INT AUTO_INCREMENT PRIMARY KEY, ".
$COL_DATE." DATE, ".
$COL_TIME." TIME, ".
$COL_MSG." TINYTEXT".
")";
$res = @mysqli_query($link, $query); //** EXCEPTION RAISED HERE! **
if($res === false)
{
if(mysqli_errno($link) != 1050) //1050 - if table already exists
{
logMySQLErrorReport($link, "Error creating table");
}
}
//....
}
else
{
logMySQLErrorReport($link, "Error setting db");
} …Run Code Online (Sandbox Code Playgroud) 在 Macos上将 PHP 升级到 8.0 后,我尝试升级 Laravel brew,但出现以下错误。我应该如何修复它?
$ composer update \xe2\x9c\x94 \xe2\x94\x82 59% hdd \xe2\x94\x82 5.43G RAM \xe2\x94\x82 14:05:07 \xe2\x94\x82 \xe2\x87\xa30.18 KiB/s \xe2\x87\xa11.51 KiB/s 192.168.1.69 IP \xe2\x94\x82 213.163.173.1 IP \nLoading composer repositories with package information\nUpdating dependencies\nYour requirements could not be resolved to an installable set of packages.\n\n Problem 1\n - Conclusion: don't install laravel/framework v8.12.0 (conflict analysis result)\n - Conclusion: don't install laravel/framework v8.12.1 (conflict analysis result)\n - Conclusion: don't install laravel/framework v8.12.2 (conflict analysis result)\n - …Run Code Online (Sandbox Code Playgroud) if(mb_stripos($hay, $needle) !== false)我的代码中有很多。我该如何替换它str_contains()?
例如,我的代码中有这个辅助函数:
<?php
$str1 = 'Hello world!'; //coming from the database
$str2 = 'hello'; // coming from $_GET user input
function str_contains_old(string $hay, string $needle):bool {
return mb_stripos($hay, $needle) !== false;
}
var_dump(str_contains_old($str1, $str2)); // gives bool(true)
Run Code Online (Sandbox Code Playgroud)
如何使它与 new 一起工作str_contains()?
var_dump(str_contains($str1, $str2)); // gives bool(false)
Run Code Online (Sandbox Code Playgroud)
php-8 ×12
php ×11
laravel ×2
composer-php ×1
curl ×1
docker ×1
gd ×1
laravel-8 ×1
linux ×1
loose-typing ×1
mysqli ×1
php-cs-fixer ×1
ubuntu ×1
ubuntu-20.10 ×1