Oraf Posted May 14, 2013 at 11:29 PM Report #507402 Posted May 14, 2013 at 11:29 PM (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 May 15, 2013 at 06:45 AM by yoda
yoda Posted May 15, 2013 at 06:40 AM Report #507408 Posted May 15, 2013 at 06:40 AM O que é que queres exactamente dessa página, e como é que acedes a esses dados? before you post, what have you tried? - http://filipematias.info sense, purpose, direction
Oraf Posted May 15, 2013 at 11:18 AM Author Report #507443 Posted May 15, 2013 at 11:18 AM (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 May 15, 2013 at 11:24 AM by Oraf
malleus Posted May 15, 2013 at 12:04 PM Report #507449 Posted May 15, 2013 at 12:04 PM 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.
Oraf Posted May 15, 2013 at 12:20 PM Author Report #507452 Posted May 15, 2013 at 12:20 PM 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?
malleus Posted May 15, 2013 at 01:16 PM Report #507458 Posted May 15, 2013 at 01:16 PM 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.
Oraf Posted May 15, 2013 at 02:01 PM Author Report #507472 Posted May 15, 2013 at 02:01 PM 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
malleus Posted May 15, 2013 at 02:29 PM Report #507489 Posted May 15, 2013 at 02:29 PM 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);
Oraf Posted May 15, 2013 at 02:40 PM Author Report #507491 Posted May 15, 2013 at 02:40 PM (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 May 15, 2013 at 02:45 PM by Oraf
malleus Posted May 15, 2013 at 02:50 PM Report #507496 Posted May 15, 2013 at 02:50 PM (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 May 15, 2013 at 02:56 PM by malleus
Oraf Posted May 15, 2013 at 03:03 PM Author Report #507503 Posted May 15, 2013 at 03:03 PM 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?
malleus Posted May 15, 2013 at 03:06 PM Report #507509 Posted May 15, 2013 at 03:06 PM 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"? 🙂
Oraf Posted May 15, 2013 at 03:10 PM Author Report #507511 Posted May 15, 2013 at 03:10 PM Mandei por msg e para um trabalho da universidade ele esta a imprimir mas nao nao vou buscar com o curl :S
malleus Posted May 15, 2013 at 03:18 PM Report #507514 Posted May 15, 2013 at 03:18 PM 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
Oraf Posted May 15, 2013 at 03:27 PM Author Report #507520 Posted May 15, 2013 at 03:27 PM 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
malleus Posted May 15, 2013 at 03:48 PM Report #507523 Posted May 15, 2013 at 03:48 PM 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.
Oraf Posted May 16, 2013 at 01:27 PM Author Report #507631 Posted May 16, 2013 at 01:27 PM 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
malleus Posted May 16, 2013 at 03:19 PM Report #507650 Posted May 16, 2013 at 03:19 PM 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.
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now