Alguns parâmetros $ _SERVER faltando ao acessar script PHP via Cron

2

Eu tenho um script que eu preciso rodar com o PHP via cron. O autor original do script fez muito usuário de determinados parâmetros $_SERVER (como REQUEST_URI ).

Mas parece que certas variáveis não existem ao executar o PHP via linha de comando ou via CRON. Por exemplo, não há solicitação uri, portanto, faz sentido que o parâmetro REQUEST_URI não esteja disponível.

Existe alguma maneira de contornar isso além de reescrever completamente o script para evitar o uso de parâmetros especiais de $_SERVER que não estão disponíveis universalmente?

    
por Jake Wilson 10.04.2012 / 23:16

3 respostas

2

Quando você realmente não conhece o script, eu recomendaria wget em seu CRON para acionar o script pelo seu servidor da Web, como faria o navegador.

Dig em wget http://localhost/yourScript.php (-O e -o pode ser interessante ou não para receber mensagens de erro & co) Quando você precisa de "mais", como um login usando cookies, você pode verificar curl

Quando for usar hack´n´slay como @pQd mencionado e você não puder editar o script 3rdParty, você deve dar uma olhada em "auto_prepend_file" em seu cli.php.ini e considerar iniciar o trabalho usando php -c

    
por 11.04.2012 / 00:13
0

por tentativa e erro [analisando erros impressos pelo script] ou análise de origem tente descobrir quais parâmetros são esperados e, no início do script, adicione: $ _SERVER ['someName'] = ''; $ _ SERVER [ 'otherName'] = '';

depende muito do script - e se ele espera alguns valores reais? e se, por exemplo, o referenciador for verificado?

    
por 10.04.2012 / 23:21
0

Como aparentemente o serverfault quer encorajar novos usuários a escrever respostas em vez de simplesmente fazer comentários simples, eu irei a resposta do Tabakhase e adicionarei minha melhoria incremental aqui.

Se você não quiser expor seu script à Web, mesmo com a proteção .htaccess, poderá escrever um pequeno script para atingir sua meta. Algo como:

#!/bin/bash

file=$(< /dev/urandom tr -dc _A-Z-a-z-0-9 | head -c16)
cp $script /var/www/host/$file.php
wget --output-document=output.txt http://server/path/to/$file.php
rm /var/www/host/$file.php

Você, é claro, precisa mexer nas permissões para se certificar de que quem está executando o cron job pode gravar arquivos em seu / var / www, o que tem suas próprias implicações.

É claro que você pode gerar $ file usando qualquer método que preferir, e pode gerenciar a saída / cabeçalhos / etc (até cookies!) editando as opções passadas para o wget.

    
por 11.04.2012 / 08:09