Jump to content

Recommended Posts

Posted (edited)

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..

Edited by yoda
Posted (edited)

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

Edited by Oraf
Posted

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.

Posted

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?

Posted

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.

Posted

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

Posted

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);
Posted (edited)

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

Edited by Oraf
Posted (edited)

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;

Edited by malleus
Posted

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?

Posted

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"? 🙂

Posted

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

Posted

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

Posted

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.

Posted

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

Posted

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.

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.