无法重新声明CodeIgniter Helper类

时间:2018-07-27 03:22:34

标签: php codeigniter docker redeclare

  [Fri Jul 27 03:08:18.935217 2018] [:error] [pid 11] [client 172.18.0.1:54146] PHP Fatal error:  Cannot redeclare CreateUniqeSlugOfuser() (previously declared in /var/www/public_html/livesite/application/helpers/MY_url_helper.php:111) in /var/www/public_html/livesite/application/helpers/my_url_helper.php on line 111

上面是错误,我认为这可能是简单地将目录中的文件重命名为MY_url_helper,但使用大写字母,但这不能解决错误,如某些网站所说。就目前而言,我不知道如何解决此问题,但我确实有一些线索。

我不是代码点火专家,我从另一个开发人员那里接过了这个项目,但目前在他们的服务器上工作。但是,它在我的服务器上不起作用。看到问题可能与自动加载有关,我做错了什么? PHP中的其他版本会导致此问题吗?

enter image description here

另一个预感可能是我必须更改某些缓存了吗?不过,我不确定...有什么主意。

enter image description here

我会说更改文件名后,错误仍然认为我使用的是小写版本吗?我知道它正在读取文件,因为我可以在文件中抛出phpinfo并因此触发因此上传的图片。

更新::做了echo CI_VERSION命令来找到它(2.2.0)。也许此版本与PHP 7.0不兼容?

php56肯定是另一台服务器上的版本...我将看看是否能以某种方式获得此docker映像。

5.6仍然错误。

enter image description here

Dockerfile

FROM php:5.6-apache
MAINTAINER Joe Astrahan <jastrahan@poolservice.software>

RUN apt-get update && apt-get upgrade -y && \
    apt-get install -y \
    bzip2 curl git less mysql-client sudo unzip zip \
    libbz2-dev libfontconfig1 libfontconfig1-dev \
    libfreetype6-dev libjpeg62-turbo-dev libpng-dev libzip-dev && \
    rm -rf /var/lib/apt/lists/*


RUN docker-php-ext-install bz2 && \
    docker-php-ext-configure gd \
        --with-freetype-dir=/usr/include/ \
        --with-jpeg-dir=/usr/include/ && \
    docker-php-ext-install gd && \
    docker-php-ext-install iconv && \
    docker-php-ext-install opcache && \
    docker-php-ext-install pdo_mysql && \
    docker-php-ext-install zip

RUN curl -sS https://getcomposer.org/installer \
    | php -- --install-dir=/usr/local/bin --filename=composer

# Set environment variables for Apache so we know its user and group names
ENV APACHE_RUN_USER www-data
ENV APACHE_RUN_GROUP www-data

# Configure Apache SSL and Standard Virtualhosts
COPY config/apache_default.conf /etc/apache2/sites-available/000-default.conf
COPY config/apache_default-ssl.conf /etc/apache2/sites-available/default-ssl.conf
COPY config/run /usr/local/bin/run

# Configure SSL Directories & Create Temporary SSL Keys
RUN mkdir /etc/apache2/ssl
RUN openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/apache2/ssl/apache.key -out /etc/apache2/ssl/apache.crt  -subj "/C=US/ST=Florida/L=Fort Lauderdale/O=Pool Service Software LLC/OU=IT Department/CN=dev.poolservice.software.local"

RUN chmod +x /usr/local/bin/run
RUN a2enmod rewrite

#Configure SSL On Apache2 & Headers Mod
RUN a2enmod ssl
RUN a2enmod headers
RUN service apache2 restart
RUN a2ensite default-ssl.conf
RUN service apache2 restart

#Install Zip & Unzip
RUN apt-get update \
    && DEBIAN_FRONTEND=noninteractive apt-get install zip unzip -y

#Install NodeJS
RUN apt-get update \
     && DEBIAN_FRONTEND=noninteractive apt-get install -y \
     software-properties-common

EXPOSE 80
EXPOSE 443

CMD ["/usr/local/bin/run"]

2 个答案:

答案 0 :(得分:0)

也许您已经以自动加载或在尝试再次加载之前初始化的类加载了帮助器。 CI可以防止类重复,但不能阻止纯PHP帮助文件。这就是为什么他们将功能包含在以下内容中:

if (!function_exists('functionname')) { ... }

我建议您也这样做。

答案 1 :(得分:0)

所以我解决了这个问题。事实证明,PHP版本并没有真正改变,因为我的docker文件可以正常工作,所以将其更改为PHP 7.0,我将其附在下面。

事实证明,CodeIgniter 2.x使用的是mysql而不是mysqli,因此我相应地更改了代码中的所有引用。另外,我还不得不将文件my_url_helper重命名为urlhelper_helper,然后在自动加载文件中进行相应更改,以便加载正确的文件。由于某种原因,即使它可以在旧服务器上运行,我也必须这样做才能使其与任何版本的PHP一起使用。

这些修复程序是修复它所必需的。