PHP.ini não carrega

1

Ok, isso provavelmente é só eu não saber o suficiente sobre o php, mas aqui está.

Estou no Ubuntu Hardy. Eu tenho uma versão compilada personalizada do PHP que eu compilei com esses parâmetros.

./configure
--enable-soap
--with-zlib
--with-mysql
--with-apxs2=[correct path]
--with-config-file-path=[correct path]
--with-mysqli
--with-curlwrappers
--with-curl
--with-mcrypt

Eu usei o comando pecl install pecl_http para instalar a extensão http.so. Está no diretório do módulo correto para o meu php.ini. Meu php.ini está carregando e eu posso mudar as coisas dentro do ini e efetuar o php. Eu incluí a linha extension=http.so no meu php.ini.

Isso funcionou bem. Até que eu adicionei essas opções de compilação, a fim de adicionar imap

--with-openssl
--with-kerberos
--with-imap
--with-imap-ssl

O que falhou porque eu precisei da biblioteca c-client que eu fixei por apt-get install libc-client-dev Depois que php compila bem e eu tenho suporte a imap, woo.

CONTUDO, agora todas as minhas chamadas para HttpRequest, que fazem parte da extensão pecl_http em http.so, resultam em erros Fatal error: Class 'HttpRequest' not found . Acho que o módulo http.so não está mais sendo carregado por um motivo ou outro, mas não consigo encontrar nenhum erro que mostre o motivo.

Você pode dizer "Já tentou desfazer a nova configuração do imap?" Para o qual vou responder. Sim, eu tenho. Eu diretamente desfiz todas as minhas alterações de configuração e desinstalei a biblioteca c-client e ainda não consigo fazê-lo funcionar. Achei estranho ... não fiz alterações que resultassem nesse problema. Depois de olhar que eu também descobri que não só a extensão http não está mais sendo carregada, mas todas as minhas extensões carregadas via php.ini não estão mais sendo carregadas.

Alguém pode pelo menos me dar mais algumas etapas de depuração? Até agora eu tentei ativar todos os erros, incluindo erros de inicialização no meu php.ini que funciona para outros erros, mas eu não estou vendo nenhum erro de inicialização na linha de comando ou via apache. E mais uma vez o php.ini parece estar sendo analisado, dado que, se eu executar o php_info (), recebo as configurações que estão no arquivo php.ini.

Editar parece que apenas algumas das configurações do php.ini estão sendo ouvidas. Existe uma maneira de testar meu php.ini?

Editar Editar Parece que estou errado novamente e o php.ini não está sendo carregado por mais tempo. No entanto, se eu executar o php_info (), obtenho que ele está procurando o meu php.ini no local correto.

Editar Editar Editar Minha configuração está no local do caminho do arquivo de configuração abaixo, mas diz que nenhum arquivo de configuração foi carregado. WTF Permission issue? No momento, ele é 644, então todos devem ser capazes de lê-lo, se não o escreverem. Eu tentei criar 777 e isso não funcionou.

Configuration File (php.ini) Path   /etc/php.ini
Loaded Configuration File   (none)

Editar Editar Editar Editar Ao carregar o ini na linha de comando usando o comando -c, eu posso executar meus arquivos e usar -m mostra que meus módulos carregam Então, nada está errado com o php.ini

Editar Editar Editar Editar Editar Eu tive que apontou para mim que o meu ini diretório config deve ser um caminho para encontrar o arquivo php.ini em não o arquivo em si. Para este fim eu tentei configurações / etc, / etc /, e deixar o php definir o diretório padrão, em seguida, movendo o meu arquivo ini para esse diretório. Todos falham: (

Editar Editar Editar Editar Editar Editar Mais informações, linha de comando executado de php - ini e ls de dir aponta nas configurações do php. Também execute com a opção -c na linha de comando onde a execução é bem-sucedida e não quando não incluo -c

j@j:/usr/local/lib$ php -ini | grep Configuration
Configuration File (php.ini) Path => /usr/local/lib
Loaded Configuration File => (none)
Configuration
j@j:/usr/local/lib$ ls /usr/local/lib
php  php.ini  python2.5  site_ruby
j@j:/usr/local/lib$ php -c /usr/local/lib/php.ini /var/www/toolbelt/test.php
j@j:/usr/local/lib$ php /var/www/toolbelt/test.php

Fatal error: Class 'HttpRequest' not found in /var/www/toolbelt/test.php on line 7
jonathan@jonathan:/usr/local/lib$

Editar Editar Editar Editar Editar Editar Editar Mais informações. Utilizando o método strace mostrado abaixo, eu testei para ver se havia alguma tentativa de abrir o arquivo ini feito no carregamento do php. Não houve

j@j:/usr/local/lib$ sudo strace  -e trace=open php -ini 2>&1 |grep  php.ini
Configuration File (php.ini) Path => /usr/local/lib
j@j:/usr/local/lib$ sudo strace  -e trace=open php -ini 2>&1 |grep  /usr/local/lib
Configuration File (php.ini) Path => /usr/local/lib
extension_dir => /usr/local/lib/php/extensions/no-debug-non-zts-20060613 => /usr/local/lib/php/extensions/no-debug-non-zts-20060613
include_path => .:/usr/local/lib/php => .:/usr/local/lib/php
    
por Jonathan Park 09.02.2011 / 23:38

2 respostas

2

Ok, esperamos que isso impeça alguém de bater a cabeça contra a parede por horas.

Eu encontrei minha própria solução na construção limpa do meu php. Acontece que você pode alterar a opção with-config-file-path e alterar o caminho que aparece na saída phpinfo () e php -ini. No entanto, se você não limpar a sua compilação, o local onde a configuração realmente será usada não será reconstruído e aumentará sua compilação.

Nota para si: limpe sempre a sua compilação. Eu sabia disso antes, mas fiquei desconcertado pelo fato de que a reconstrução de fato muda o que o php me diz sobre o diretório.

    
por 10.02.2011 / 02:22
2

Verifique o valor da opção "--with-config-file-path=". Deve ser / etc não /etc/php.ini. Parece que o Apache está tentando carregar o /etc/php.ini/php.ini e é por isso que não encontra o arquivo.

Se isso não funcionar, você pode tentar verificar quais arquivos são abertos pelo php:

strace -f -e trace=open php --ini

A resposta irá ajudá-lo a descobrir onde está o php procurando por arquivos php.ini. Esta é a saída em um dos meus servidores:

10833 open("/usr/bin/php-cli.ini", O_RDONLY) = -1 ENOENT (No such file or directory)
10833 open("/etc/php-cli.ini", O_RDONLY) = -1 ENOENT (No such file or directory)
10833 open("/usr/bin/php.ini", O_RDONLY) = -1 ENOENT (No such file or directory)
10833 open("/etc/php.ini", O_RDONLY)    = 3
    
por 10.02.2011 / 00:33