Skip to content

Instantly share code, notes, and snippets.

@padawin
Last active November 7, 2017 11:00
Show Gist options
  • Save padawin/f46a45fc9ac132f134215adeda61fbc0 to your computer and use it in GitHub Desktop.
Save padawin/f46a45fc9ac132f134215adeda61fbc0 to your computer and use it in GitHub Desktop.
segfault-redis-php

Requirements

docker

Build

make build

Run php 5.6 (Should segfault)

make run56

Run php 7.1 (Should work)

make run71
{
"name": "redis/segfault",
"require": {
"ext-redis": "3.1.4"
},
"require-dev": {
"phpunit/phpunit": "~5.0"
}
}
FROM php:5.6-cli
RUN apt-get update && \
apt-get install -y libzip-dev git git-core
COPY composer.json /var/www/project/
COPY php.ini /usr/local/etc/php/php.ini
RUN cd /var/www/project/ && \
pecl install redis && \
pecl install zip && \
php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');" && \
php composer-setup.php --install-dir=/var/www/project/ && \
php -r "unlink('composer-setup.php');" && \
php ./composer.phar install
COPY Foo.php /var/www/project/
COPY FooTest.php /var/www/project/
FROM php:7.1-cli
RUN apt-get update && \
apt-get install -y libzip-dev git git-core
COPY composer.json /var/www/project/
COPY php.ini /usr/local/etc/php/php.ini
RUN cd /var/www/project/ && \
pecl install redis && \
pecl install zip && \
php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');" && \
php composer-setup.php --install-dir=/var/www/project/ && \
php -r "unlink('composer-setup.php');" && \
php ./composer.phar install
COPY Foo.php /var/www/project/
COPY FooTest.php /var/www/project/
<?php
class Foo {
private $redis;
public function __construct($redis) {
$this->redis = $redis;
}
public function bar() {
return $this->redis->incr();
}
}
<?php
namespace MyFoo;
include "Foo.php";
class BrowserControllerTest extends \PHPUnit_Framework_TestCase
{
/**
* @group API
* @group TRAVIS-PROXY
*/
public function testFoo()
{
$redis = $this->getMockBuilder(\Redis::class)
->disableOriginalConstructor()
->setMethods(['incr', 'expire', 'getLastError'])
->getMock();
$redis
->method('incr')
->willReturn(10);
$redis
->method('expire')
->willReturn(true);
$redis
->method('getLastError')
->willReturn(null);
$f = new \Foo($redis);
$bar = $f->bar();
$this->assertEquals(10, $bar);
}
}
build:
docker build . -f Dockerfile56 -t test-redis-56
docker build . -f Dockerfile71 -t test-redis-71
run56:
docker run -it test-redis-56 /var/www/project/vendor/bin/phpunit /var/www/project/FooTest.php
run71:
docker run -it test-redis-71 /var/www/project/vendor/bin/phpunit /var/www/project/FooTest.php
extension=redis.so
extension=zip.so
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment