Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

erison

cURL em pasta

Recommended Posts

estou dando um include

da certo;

include 'pasta/pagina.php';

;

 

mas estou precisando passar um post para ela

ex:

 

$cURL 	= 	curl_init('pasta/pagina.php');
	$cURL 	= 	curl_setopt(CURLOPT_RETURNTRANSFER,true);
				curl_setopt(CURLOPT_POST,TRUE);
				curl_setopt(CURLOPT_POSTFIELDS,array('param'=>123));
	$Result = 	curl_exec($cURL);
				curl_close($cURL);

	echo $Result;

 

e da erro

Warning: curl_setopt() expects exactly 3 parameters, 2 given in

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom, não sei bem qual a sua dificuldade mas pelo que vi no seu código deu para deduzir. Vou lhe mostrar um pedaço de um código que eu uso.

 

//====    INICIANDO E INFORMANDO A URL
$curl = curl_init("XXX URL DO LUGAR XXX");

//====    CAMPOS
$XXXCAMPOSXXX = "parametro1=12312&parametro2=123123";

//====    CONFIGURANDO O CURL
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_POST, TRUE);
curl_setopt($curl, CURLOPT_POSTFIELDS, $XXXCAMPOSXXX);

$returno_final = curl_exec($$curl);
echo $returno_final

Compartilhar este post


Link para o post
Compartilhar em outros sites

Nas suas chamadas a curl_setopt, você esqueceu de informar o resource cURL que vai ter a opção alterada...

 

você usa:

curl_setopt(CURLOPT_POST,TRUE)

 

você deve usar:

curl_setopt($cURL, CURLOPT_POST, TRUE)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Mas continua dando o mesmo erro??

 

fiz uns testes aqui e descobrir unas coisas interessantes:

//====    INICIANDO E INFORMANDO A URL
$curl = curl_init("XXX URL DO LUGAR XXX")

 

Se você colocar uma url relativa percebi que não da certo, se você colocar por exemplo uma url tipo imasters.com.br vai funcionar, a questão tem haver com isso, coloca tipo assim agora

 

 

define('SITEROOT', getcwd() . "/");

$g_url_cur = SITEROOT . "pasta/pagina.php";
$curl = curl_init($g_url_cur);
[...]

Compartilhar este post


Link para o post
Compartilhar em outros sites

O problema inicial, do número de argumentos informados já foi respondida pelo Evandro no post #3.

 

Se ainda não funcionou, você deveria prestar mais informações para nós, informações estas obtidas com curl_error()

 

Se você colocar uma url relativa percebi que não da certo, se você colocar por exemplo uma url tipo imasters.com.br vai funcionar, a questão tem haver com isso, coloca tipo assim agora

Você conseguiu fazer funcionar acessando o arquivo local? Eu só consegui acessando na forma de URL:

 

$ch = curl_init( 'http://localhost/benchmark.php' );

curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true );

$data = curl_exec( $ch ) or die( curl_error( $ch ) );

curl_close( $ch );

print $data; // Isso seria desnecessário se não tivéssemos o RETURNTRANFER o.O

acho que isso não tem nada haver...

Ainda não :rolleyes:

Compartilhar este post


Link para o post
Compartilhar em outros sites

O problema inicial, do número de argumentos informados já foi respondida pelo Evandro no post #3.

 

Se ainda não funcionou, você deveria prestar mais informações para nós, informações estas obtidas com curl_error()

 

 

Você conseguiu fazer funcionar acessando o arquivo local? Eu só consegui acessando na forma de URL:

 

$ch = curl_init( 'http://localhost/benchmark.php' );

curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true );

$data = curl_exec( $ch ) or die( curl_error( $ch ) );

curl_close( $ch );

print $data; // Isso seria desnecessário se não tivéssemos o RETURNTRANFER o.O

 

Ainda não :rolleyes:

 

não entendi muito bem o que você quis me dizer..

Compartilhar este post


Link para o post
Compartilhar em outros sites

Perguntei se conseguiu fazer funcionar da forma que disse no post #7.

 

Eu não consegui, aqui dizia que o wrapper file não existia ou havia sido desabilitado na libcurl.

 

Como no Windows temos poucas opções de customização, talvez seja por isso.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Fiz uns testes aqui, realmente não funcionou, depois de fazer alguns teste cheguei a seguinte constatação:

  • O Caso 1 funciona porque é colocando uma url com HTTP e por isso funciona.
  • O Caso 2 não funciona mesmo o arquivo estando na mesma pasta.

 

A solução é usar uma url absoluta do arquivo. Estou dizendo isso até que provem o contrário.

 

$g_url_cur = "http://localhost/dir/teste2.php";//==== CASO 1
$g_url_cur = "teste2.php";//==== CASO 2


$curl = curl_init($g_url_cur);


//====    CAMPOS
$XXXCAMPOSXXX = "parametro1=12312&parametro2=123123";

//====    CONFIGURANDO O CURL
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_POST, TRUE);
curl_setopt($curl, CURLOPT_POSTFIELDS, $XXXCAMPOSXXX);

$returno_final = curl_exec($curl);


echo curl_error($curl);
echo $returno_final

Compartilhar este post


Link para o post
Compartilhar em outros sites

Queridos, há dois erros na implementação:

 

1. Estão pecando em não passar o protocolo

 


// Aqui, assumimos que "teste2.php" esteja em "getcwd()",
// ou seja, o diretório atual.
$handler = curl_init('file://teste2.php');

echo curl_exec($handler);

 

2. O segundo erro, é esperar que um arquivo php processe os parâmetros por si só

 

cURL vai fazer ago similar a você abrir o arquivo/caminho no seu editor (bloco de notas, textmate, sublime, etc)

 

O que acontece se você abrir teste2.php no editor???

 

R. Vai aparecer o código fonte.

 

 

O que acontece se você abrir teste2.php?parametro1=12312&parametro2=123123 no seu editor????

 

R. Se você conseguir, vai aparecer o código fonte.

 

 

Como eu tenho certeza ABSOLUTA que não é isso que você deseja, vou propor a solução:

 

1º passo: Encontre o caminho executável do interpretador PHP

 

Dependendo da forma de instalação, é possível que ele já esteja no seu PATH.

 

Abra um interpretador de comandos (terminal, prompt do DOS, powershell) e simplesmente digite

 

php -v

 

Seguido de <ENTER>

 

Caso você veja informações sobre a versão do PHP, a coisa fica mais fácil. Se a saída for um erro,

será necessário localizá-lo.

 

Crie um arquivo .php com o seguinte conteúdo:

<?php

echo PHP_BINDIR;

 

Abra o arquivo no navegador. Neste caminho haverá um arquivo php ou php-cli.exe. Este é o caminho do executável.

 

2º No arquivo que usa o cURL, trocaremos por popen.

 

ficaria assim:

 

<?php

$resource = popen('php teste2.php parametro1 parametro2', 'r') or die('Não foi possível executar o arquivo');

while(!feof($resource)) {
   echo fgets($resource);
}

fclose($resource);

 

Algumas modificações deverão ser feitas em teste2.

 

1. Não haverão as variáveis de servidor $_SERVER, $_REQUEST

 

2. Não haverão as variáveis de método $_GET, $_POST

 

3. Para pegar os parâmetros, é necessário usar a variável $argv

 

 

 

Exemplo funcional:

 

2 arquivos: index.php e teste.php

 

index.php será acessada pelo navegador e acessará output.php

 

index.php

<!DOCTYPE html>
<html lang="pt-BR">
   <head>
       <title>Exemplo</title>
       <meta charset="utf-8">
   </head>

   <body>
<?php

if (array_key_exists('nome', $_POST)) {
   try {
       $exec = sprintf('%s/php', PHP_BINDIR);
       if (!file_exists($exec)) {
           $exec .= '-cli.exe';
       }
       if (!is_executable($exec)) {
           throw new RuntimeException('Executável PHP não encontrado.');
       }
       $handler = popen("{$exec} teste.php {$_POST['nome']}", 'r');
       if (!$handler) {
           throw new UnexpectedValueException('Impossível executar!');
       }
       echo sprintf("<p>%s</p>", fgets($handler));
       fclose($handler);
   } catch (Exception $e) {
       echo sprintf('
       <p style="background: #f66; color: #f00; font-weight: bold">%s</p>',
           $e->getMessage()
       );
   }
}

?>
       <form action="" method="post">
           <fieldset>
               <legend>Teste</legend>
               <p>
                   <label for="nome">
                       <span>Digite seu nome:</span>
                       <input id="nome" type="text" name="nome" required="required">
                   </label>
               </p>
               <p>
                   <button>Executar!</button>
               </p>
           </fieldset>
       </form>
   </body>
</html>

 

teste.php

<?php

echo sprintf('Olá, %s!', ucfirst($argv[1]));

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.