最近、アップグレード後にphp 5.4.26から5.4.28にアップグレードしましたが、このエラーが発生しています
Notice: Unknown: send of 6 bytes failed with errno=32 Broken pipe in Unknown on line 0
次のコードを実行するたびに:
<?php
$tasks = array(
'1' => array(),
'2' => array(),
);
ini_set('display_errors', true);
class RedisClass {
private $redis;
public function __construct()
{
$this->redis = new Redis();
$this->redis->connect('localhost', 6379);
}
}
$redis = new RedisClass();
foreach ($tasks as $index => $task)
{
$pid = pcntl_fork();
// This is a child
if($pid == 0)
{
echo "Running ".$index." child in ". getmypid() ."\n";
break;
}
}
switch($pid)
{
case -1 :
die('could not fork');
break;
case 0:
// do the child code
break;
default:
while (pcntl_waitpid(0, $status) != -1)
{
$status = pcntl_wexitstatus($status);
echo "Child completed with status $status\n";
}
echo "Child Done (says: ". getmypid() .")";
exit;
}
子を 1 つだけフォークすると、PHP 通知が表示されません。複数の子を実行すると、最初の子を除くすべての子に対して PHP 通知が表示されます。
ここで何が起こっているかについて手がかりを持っている人はいますか?
Redis 接続を複数回閉じようとしていると思いますが、これは問題なく少なくとも 4 か月間実行しているコードです。
これらの通知は、5.4.28 へのアップグレード後にのみ表示され始めます。
PHP の変更ログを確認しましたが、この問題の原因と思われるものは何も見つかりません。
これをバグとして PHP に報告する必要がありますか?
アップデート:
Redis の問題である可能性があるようです。私はphpredisを使用しています。Redisをロードする代わりに、mysql 接続で同じコードをテストしましたが、エラーは発生しません。
class MysqlClass {
private $mysqli;
public function __construct()
{
$this->mysqli = mysqli_init(); //This is not the droid you are looking for
$this->mysqli->real_connect('IP_ADDRESS',
'USER_NAME',
'PASSWORD');
}
}
$mysql = new MysqlClass();