Ir para o conteúdo
Oraf

includes

Mensagens Recomendadas

Oraf

Boas pessoal, alguem me sabe dizer se e possivel usar includes para actualizar a base de dados?

<?php
$file = file_get_contents('http://pagina que tem uma funcao js e que quero ir buscar o valor.php');
$con = mysql_connect("localhost","root","");
mysql_select_db("koisas", $con);
mysql_query("UPDATE mensagens SET estado= "$file");

Ha alguma maneira de fazer isto?

eu tentei desta maneira mas o que e impresso é o inicio da funcao em js que tenho na pagina..

Editado por yoda

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Oraf

Boas, entao e assim esta pagina tem uma funcao em javascript que me vai buscar o valor de uma variavel que tenho em outro servidor e escreve na pagina neste servidor eu quero colocar esse valor neste update.

Basicamente da-me o ultimo ficheiro que foi inserido no outro servidor e escreve na pagina deste servidor, eu preciso do valor que e escrito para colocar no update

<script type="text/javascript">

 var isIE8 = window.XDomainRequest ? true : false;
 var invocation = createCrossDomainRequest();
 var url = 'http://outro servidor/funcaolista.php';	

 function createCrossDomainRequest(url, handler)
 {
	 var request;
	 if (isIE8)
	 {
		 request = new window.XDomainRequest();
	 }
	 else
	 {
		 request = new XMLHttpRequest();
	 }
	 return request;
 }

 function callOtherDomain()
 {
	 if (invocation)
	 {
		 if(isIE8)
		 {
			 invocation.onload = outputResult;
			 invocation.open("GET", url, true);
			 invocation.send();
		 }
		 else
		 {
			 invocation.open('GET', url, true);
			 invocation.onreadystatechange = handler;
			 invocation.send();
		 }
	 }
	 else
	 {
		 var text = "No Invocation TookPlace At All";
		 var textNode = document.createTextNode(text);
		 var textDiv = document.getElementById("textDiv");
		 textDiv.appendChild(textNode);
	 }
 }

 function handler(evtXHR)
 {
	 if (invocation.readyState == 4)
	 {
		 if (invocation.status == 200)
		 {
			 outputResult();
		 }
		 else
		 {
			 alert("Invocation Errors Occured");
		 }
	 }
 }

 function outputResult()
 {
	 var response = invocation.responseText;
	 var textDiv = document.getElementById("textDiv");
	 textDiv.innerHTML += response;


 }
</script>

 <div id="textDiv">

</div>
 <?php

echo"<script type='text/javascript'>callOtherDomain();</script>";

?>

Este é o codigo que tenho na tal pagina e eu quero colocar o valor da variavel response no meu update

E nao sei bem como o fazer...ja tentei varias coisas para passar o valor desta pagina para a outra mas sem sucesso..

desde ja obrigado pela resposta

Editado por Oraf

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
malleus

Se bem me lembro não podes usar file_get_contents para abrir ficheiros remotos, que é o que depreendo por file_get_contents('http://...'). Para o efeito tens a libraria curl. Mas mesmo assim, indo buscar um ficheiro php apenas tens acesso aos dados que existem no fim do ciclo de execução desse ficheiro PHP, o que não inclui eventuais pedidos AJAX (que de qualquer modo apenas ocorrem no final do ciclo de execução do PHP).

Talvez seja melhor pensares noutra solução. Uma possibilidade é fazeres um pedido AJAX directo ao servidor remoto via JSONP. Outra possibilidade é ires buscar os dados necessários a um php remoto via curl...depende dos teus requisitos.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Oraf

Se bem me lembro não podes usar file_get_contents para abrir ficheiros remotos, que é o que depreendo por file_get_contents('http://...'). Para o efeito tens a libraria curl. Mas mesmo assim, indo buscar um ficheiro php apenas tens acesso aos dados que existem no fim do ciclo de execução desse ficheiro PHP, o que não inclui eventuais pedidos AJAX (que de qualquer modo apenas ocorrem no final do ciclo de execução do PHP).

Talvez seja melhor pensares noutra solução. Uma possibilidade é fazeres um pedido AJAX directo ao servidor remoto via JSONP. Outra possibilidade é ires buscar os dados necessários a um php remoto via curl...depende dos teus requisitos.

Obrigado pela reposta malleus, mas se calhar expliquei-me mal eu ja tou a ir buscar o valor atraves de cross domain request para o meu servidor com a funcao de cima agora so queria usar esse valor que me e devolvido no response.

o que eu queria mesmo era passar o valor response em javascript para a outra pagina onde tenho os updates..

nao ha nenhuma maneira?

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
malleus

Ah então tens

file_get_contents('file.php');

e não

file_get_contents('http://www.xxx.com/file.php');

com file.php um ficheiro local que efectua um pedido assíncrono (via javascript/ajax) a outro servidor.

Creio que se mantém parte do que disse: a partir do momento que fazes o include de um ficheiro php apenas tens acesso ao que existir no fim do ciclo de execução do script php. Eventuais scripts javascript que também façam parte desse script php apenas são corridos após o final da execução do PHP e em contexto de browser.

Tendo em conta os teus requisitos, e aqui também mantenho o que disse, trocava a chamada file_get_contens por uma chamada curl.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Oraf

Ah então tens

file_get_contents('file.php');

e não

file_get_contents('http://www.xxx.com/file.php');

com file.php um ficheiro local que efectua um pedido assíncrono (via javascript/ajax) a outro servidor.

Creio que se mantém parte do que disse: a partir do momento que fazes o include de um ficheiro php apenas tens acesso ao que existir no fim do ciclo de execução do script php. Eventuais scripts javascript que também façam parte desse script php apenas são corridos após o final da execução do PHP e em contexto de browser.

Tendo em conta os teus requisitos, e aqui também mantenho o que disse, trocava a chamada file_get_contens por uma chamada curl.

hmm ok, vamos ver se percebi por curl da para ir buscar a outra pagina por php e colocar o valor numa string certo?

era isso que eu queria mas testei isto

<?php

// create curl resource

$ch = curl_init();

// set url

curl_setopt($ch, CURLOPT_URL, "http://dddddddd/funcaolista.php");

//return the transfer as a string

curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

//change the UA to spoof IE7.

curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)');

// $output contains the output string

$output = curl_exec($ch);

// close curl resource to free up system resources

curl_close($ch);

?>

testei este exemplo mas nao obtenho nenhum output. E necessario colocar alguma coisa na pagina que quero ir buscar? e preciso colocar alguma coisa na pagina funcaolista.php?

se me podesses ajudar agradecia eu nisto sou um bocado nabo

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
malleus

Numa primeira vista, se o teu script remoto fizer um echo deveria funcionar, a menos que o php não tenha essa extensão instalada/activada.

Em runtime podes usar:

function_exists("curl_init")

para verificar se a função existe. Alternativamente deves ter essa informação no phpinfo().

Deixo-te aí um pedaço código, algo antigo, mas que funciona actualmente num site (verifica o estado de uma conta skype, através de um curl a um ficheiro de estado remoto):

$curl = curl_init("http://mystatus.skype.com/???.txt");
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, ???);
$status = curl_exec($curl);

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Oraf

malleus eu tive a verificar e o curl no servidor que tou esta enable, no servidor onde vou buscar tambem esta enable.

outra coisa fazes referencia a

$curl = curl_init("http://mystatus.skype.com/???.txt");

ficheiro .txt e eu estava a fazer a pagina.php

tenho de fazer um script no servidor que tem os dados e isso?

e que eu tava a tentar chamar uma pagina..

Obrigado pela ajuda

Editado por Oraf

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
malleus

Não, onde vais buscar basta que o script php imprima o valor desejado (podes visitar esse script directamente no browser e verificar se ele de facto é imprimido).

Se sim, deveria funcionar...

EDIT: podes e deves ter scripts php em ambos os lados, pelo menos foi com essa idéia que fiquei (que tinhas um script php remoto que te devolvia dados e que os ias buscar via xmlhttprequest).

Considerando script1.php como o teu script local e script2.php o script php que tem o valor que queres ir buscar (o script remoto):

-> script1.php faz curl a script2.php;

-> script2.php tem a programação que necessitares mas deve fazer echo do valor que queres devolver;

-> script1.php recebe esse valor via curl;

Editado por malleus

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Oraf

Nao percebo entao, ja testei com o google e o yahoo e funciona... mas quando coloco o endereco que quero a pagina fica em branco.. alguma sugestao?

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
malleus

Verificaste, como referi atrás, se o script imprime algo? Visita o script no teu browser.

Podes partilhar aí o endereço do script remoto ou está sob "segredo de negócio"? :)

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
malleus

Posto isso, e com o código de cima, estou a conseguir ir buscar o valor correctamente (6-1368626768).

Para referência:

$curl = curl_init("http://...funcaolistar.php");
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, 555);
$status = curl_exec($curl);
echo $status;

Não te sei dizer o que se poderá estar a passar

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Oraf

Nao percebo... eu tento com o codigo que meteste e nao da nada, mas entao se tu consegues ir buscar o valor deve ser alguma coisa do servidor onde tou...

Vou ver se descubro e digo algo..

Muito obrigado pela ajuda

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
malleus

No problemo, provavelmente estás aí com problemas ao nível de outgoing ports no router/firewall. Se resolveres não te esqueças de partilhar a resolução com o pessoal.

Nota que a libraria curl tem métodos de erro/debug como curl_errno, curl_error que te podem ajudar.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Oraf

Boas, entao aqui fica a resolucao do problema ao que parece a firewall estava a bloquear como disses-te malleus..

Mas tambem mudei o url para 192.168.2.6:8080/funcaolistar.php colocando o ip da maquina em vez do link agora esta tudo a funcionar

<?php
$curl = curl_init("192.168.2.6:8080/funcaolistar.php");
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, 555);
$status = curl_exec($curl);
echo $status;
?>

fica aqui a solucao, ao fim disto foi so usar o status.

obrigado pela ajuda podem fechar o topico

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
malleus

Ainda bem :)

Nota que no código que te dei substitui uma variável por 555...de modo a ser mais legível.

Segundo a api do curl é o timeout em segundos e como estamos a falar de php o pedido curl é bloqueante.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.