LoginSignup
4
3

More than 5 years have passed since last update.

Docker(nginx+php-fpm)で既存ソースをローカルで実行してsession_startエラー

Last updated at Posted at 2018-08-23
Warning: session_start(): Cannot send session cache limiter - headers already sent (output started at /usr/share/nginx/html/index.php:1) in /usr/share/nginx/html/conf.php on line 2

session_start() の前に改行とかあるのではないの?
という指摘が多い中、本番ではエラー出てないし、改行などないんだけどなぁと悩んでいたところこちらの記事を発見。

解決方法

php.iniをDockerコンテナに設置して、output_buffering = 4096 を設定。
コンテナ再起動したら、エラーは解消された。

php.ini
output_buffering = 4096

これを config/php.iniとして設置。

おまけ

docker-compose.yml
version: '3'
services:
    web:
        restart: 'yes'
        image: nginx:alpine
        ports:
            - "8080:80"
        restart: always
        volumes:
            - ./config/default.conf:/etc/nginx/conf.d/default.conf
            - ./dist:/usr/share/nginx/html
        depends_on:
            - app
    app:
        image: php:5-fpm-alpine
        volumes:
            - ./config/php.ini:/usr/local/etc/php/conf.d/php.ini
            - ./dist:/usr/share/nginx/html
        ports:
            - "9000:9000"
        working_dir: /usr/share/nginx/html

こちらは config/default.conf に置いたnginxの設定

default.conf
server {
    listen 80;
    server_name localhost;

    root  /usr/share/nginx/html;
    index index.php;

    access_log /var/log/nginx/access.log;
    error_log  /var/log/nginx/error.log;

    location / {
        try_files $uri $uri/ /index.php$is_args$args;
    }

    location ~ \.php$ {
        fastcgi_split_path_info ^(.+\.php)(\.+)$;
        fastcgi_pass app:9000;
        fastcgi_index index.php;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param PATH_INFO $fastcgi_path_info;
    }
}

参考

PHPで"session_start()"のエラーが出たときの対応

4
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
3