Ir para conteúdo

POWERED BY:

Arquivado

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

NIKESLB

[Resolvido] extensões do PHP

Recommended Posts

Olá,

ando a procura pela net em que consiste cada extensão do PHP, mas não sei quais são as extensões certas para aquilo que eu quero. Faço uns testes de scripts mas em local com o wamp não funciona e quando meto num servidor já funciona bem e gostaria de testar localmente certas funções, pela vez de sempre por no servidor.

 

Por exemplo qual será a extensão para o envio de email através de um formulário? ou ainda outro script que consiste em saber o número de user online e o recorde usando variáveis globais tal como neste exemplo:

<?php 
$path = empty($HTTP_SERVER_VARS['PATH_INFO'])?$HTTP_SERVER_VARS['PHP_SELF']:$HTTP_SERVER_VARS['PATH_INFO'];
$host = empty($HTTP_SERVER_VARS['SERVER_NAME'])?$HTTP_ENV_VARS['SERVER_NAME']:$HTTP_SERVER_VARS['SERVER_NAME'];
$string=$_SERVER['QUERY_STRING']?'?'.$_SERVER['QUERY_STRING']:'';
$hostpath="$host$path$string";      // este $hostpath é a url real neste momento

$timeoutseconds = 600; // Tempo para renovar a lista de usuários on-line
$ip = $_SERVER['REMOTE_ADDR'];    
?>

 

Qual será a extensão para que consigo visualizar estes scripts localmente sem dar erro e funcionando bem?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Nada disso precisa de extensão a mais

A função mail() depende de um servidor SMTP local. Se você não tem SMTP local não funcionará mesmo.

 

Troque HTTP_SERVER_VARS por _SERVER. O mesmo serve para _POST, _GET etc. veja mais sobre a diretiva register_long_arrays aqui:

http://www.php.net/manual/en/ini.core.php#ini.register-long-arrays

Compartilhar este post


Link para o post
Compartilhar em outros sites

Além do que, as variáveis: $HTTP_SERVER_VARS estão obsoletas (Extintas), utilize as variáveis de ambiente $_SERVER (escopo global)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Estou a perceber. Só não percebo é porquê que quando meto o script de useronline no servidor funciona perfeitamente e quando tento localmente aparece um monte de erros como:

"Warning: mysql_num_rows() expects parameter 1 to be resource, boolean given in..."

 

e a minha conexão a bd é feito da seguinte forma:

<?php
$host = "localhost";  //host do mysql 
$user = "root";  // usuário 
$pass = "";  // senha do usuário 
$base = "test"; // nome da base de dados
?>

 

Por isso achei que era necessário uma extensão já que no servidor o erro não aparece

Compartilhar este post


Link para o post
Compartilhar em outros sites

Só não percebo é porquê que quando meto o script de useronline no servidor funciona perfeitamente e quando tento localmente aparece um monte de erros como:

"Warning: mysql_num_rows() expects parameter 1 to be resource, boolean given in..."

 

o PHP possui muitas configurações. Uma delas é a exibição de erros, que pode ser limitada ou até desabilitada.

 

 

O erro acima deve estar sendo ocultado no servidor. Ele diz que você passou um booleanos (provavelmente FALSE) para mysql_num_rows. Isso quer dizer que mysql_query falhou, o que significa que há erro na sua consulta SQL

Compartilhar este post


Link para o post
Compartilhar em outros sites

acho que é problema de conexão a base dados, porque mesmo removendo a ligação em PHP dá os mesmos erros, por isso pressuponho que não haja ligação a base dados.

 

Portanto estou em local. Mas eu activei a extensão do PDO, será que ao activar a ligação só pode ser feito em pdo e não de forma normal?

Compartilhar este post


Link para o post
Compartilhar em outros sites

aqui tem:

<?

$host = "localhost";  // host do mysql
$user = "root";       // usuário
$pass = "";     // senha do usuário
$base = "test"; // nome da base de dados

// conecta o mysql
$conn = mysql_connect($host, $user, $pass) or die ("<br><br><center>Problemas ao conectar no servidor: " . mysql_error() . "</center>");
// seleciona a base de dados
$banc = mysql_select_db($base) or die ("<br><br><center>Problemas ao selecionar a base de dados do sistemas: " . mysql_error() . "</center>");

?>

 

também já tentei desta forma:

mysql_connect("localhost", "root", "");
mysql_select_db("test")

Compartilhar este post


Link para o post
Compartilhar em outros sites

<?

$host = "localhost";  // host do mysql
$user = "root";       // usuário
$pass = "";     // senha do usuário
$base = "test"; // nome da base de dados

// conecta o mysql
$conn = mysql_connect($host, $user, $pass) or die ("<br><br><center>Problemas ao conectar no servidor: " . mysql_error() . "</center>");
// seleciona a base de dados
$banc = mysql_select_db($base) or die ("<br><br><center>Problemas ao selecionar a base de dados do sistemas: " . mysql_error() . "</center>");
?>

 

dessa forma você vê o erro retornado pelo MySQL

Que mensagem aparece?

 

PS: seu erro inicial era com mysql_num_rows(). Você postou o código incompleto

Compartilhar este post


Link para o post
Compartilhar em outros sites

aparece este erro:

Problemas ao conectar no servidor: " . mysql_error() . "

"); // seleciona a base de dados $banc = mysql_select_db($base) or die ("

 

Problemas ao selecionar a base de dados do sistemas: " . mysql_error() . "

"); ?>

 

$path = empty($_SERVER['PATH_INFO'])?$_SERVER['PHP_SELF']:$_SERVER['PATH_INFO'];
$host = empty($_SERVER['SERVER_NAME'])?$_SERVER['SERVER_NAME']:$_SERVER['SERVER_NAME'];
$string=$_SERVER['QUERY_STRING']?'?'.$_SERVER['QUERY_STRING']:'';
$hostpath="$host$path$string";      // este $hostpath é a url real neste momento

$timeoutseconds = 600; // Tempo para renovar a lista de usuários on-line
$ip = $_SERVER['REMOTE_ADDR'];     // caputura o ip do usuario
$timestamp=time();          //pega o timestampo atual (não mexer)
$timeout=$timestamp-$timeoutseconds;     //para saber quais os registros velhos para serem apagados

// a seguir a sequencia sql para apagar os registros antigos da tabela
mysql_query("DELETE FROM useronline WHERE timestamp<$timeout");

// a seguir insere a visita atual na tabela, inserindo o ip e a pagina onde esta visitantdo
mysql_query("INSERT INTO useronline VALUES ('$timestamp','$ip','$hostpath')");

//a seguir ele conta quantos ip distintos existem registrados na tabela USERONLINE
$result = mysql_query("SELECT DISTINCT ip FROM useronline");
$user = mysql_num_rows($result);
// $user é o valor de visitantes on-line baseado nos acessos dos ultimos 600 segundos


//agora para saber o recorde de acessos simultaneos

// primeiro deletamos os registros de usuarios menores/igual ao atual($user) da tabela MAXONLINE
mysql_query("DELETE FROM maxonline WHERE qtos<=$user");

// agora insere o dia, a hora e a quantidade de usuarios on line neste momento
mysql_query("INSERT INTO maxonline VALUES (now(),now(),'$user')");

// aqui fazemos uma busca pelo maior valor registrado na tabela, que vai ser o record de usuarios online
$max = mysql_query("SELECT * FROM maxonline ORDER BY qtos DESC LIMIT 1");
while ($reg = mysql_fetch_array($max)){
   /* executa sql */

   // aqui convertemos a data para formato dd/mm/aa
$dia = substr($reg['dia'],8,2) . "/" .
substr($reg['dia'],5,2) . "/" .
substr($reg['dia'],2,2);

//convertemos o horario para  hh/mm
$horario = substr($reg['horario'],0,2) . ":" .
substr($reg['horario'],3,2) . "h";
$qtos = $reg['qtos'];
}

 

É um script que encontrei, ele funciona a 100% no servidor mas localmente só aparece erros.

 

Depois tenho outra página em que faço echo das variáveis para exibir o resultado com o include da página acima

Compartilhar este post


Link para o post
Compartilhar em outros sites

resultou o.O

Ou seja o simples facto de não escrever php faz confundir o sistema todo, pensava que não fazia diferença.

Agradeço pela sua ajuda. Vou agora a procura de todos os <? em outros scripts :joia:

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.