• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

MROverclock

PHP, var globais e Servidor a darem luta

8 mensagens neste tópico

Boas pessoal,

Eu tenho um site alojado num servidor online.

Até ao ano novo tudo bem, sem problemas tudo funcionava. O site esteve offline uns dias e agora voltou a up novamente, só que algumas coisas não estão a funcionar.

Eu julgo que estou a ter um problema com a variavel $_SESSION

Ela funciona em em algumas partes do site, mas numa parte em que se desenha um gráfico em .PNG, o código que cria o PNG não recebe a $_SESSION  (ou recebe tudo já vazio) e perde-se todo o conteúdo desta variável.

Para chamar o gráfico faço assim (incluo parte de codigo que tenho antes):

<?php
session_start();
(...)
?>

<img src="graficos/grafico_mes_dist.php" align="centro" />

e no inicio do grafico_mes_dist.php tenho

session_start();
(...)

Ora... se eu tirar o session_start(); do inicio do grafico já não perco a sessão, mas nada de gráfico o que significa que o gráfico obviamente não acede à variável $_SESSION onde estão os dados para que ele se construa.

Friso que no meu servidor local tudo funciona às 1000 maravilhas... mas online nada.. alguma solução? Eu penso que o problema deve estar mesmo no servidor, alguém tem uma ideia do que poderá ser para que eu possa entrar em contacto com a administração do alojamento?

Abraços

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Ninguém encontra nada? estou mesmo desesperado e isto dava jeito que estivesse a funcionar  :bye2:

Se ajudar, a versão do PHP on-line é a 5.2.5 e a que está aqui no meu servidor (onde tudo funciona) é a 5.1.6

fica aqui o código sem ser em anexo para ficar mais prático  ;)

<?php

session_start();

//$maior_distancia = 100;

for($dias=1;$dias<=30;$dias++)
{
if($_SESSION['distancia_ultimos']['dist'][$dias] > $maior_distancia)
{
	$maior_distancia = $_SESSION['distancia_ultimos']['dist'][$dias];
}
}
$unidadeDST=270/$maior_distancia;
Header('Content-Type: image/png');

//Definir tamanho da imagem
$largura = 610;
$altura = 300;
$im = ImageCreateTrueColor($largura,$altura);

//definir cores
$preto = imageColorAllocate($im, 0, 0, 0);
$branco = imagecolorallocate($im, 255,255,255);
$cUser = imagecolorallocate($im,200,0,0);
$fundo = imagecolorallocate($im, 0xFF,0xFF,0xFF);
$linhas = imagecolorallocate($im, 0x10,0xAA,0x13);
$moldura= imagecolorallocate($im, 0, 66, 0);
$barras = imagecolorallocate($im, 0x0b,0x9b,0xf2);
$corMoldura = imagecolorallocate($im,0x0b,0x9b,0xf2);



//preencher fundo
ImageFill($im,0 ,0 ,$fundo);
imagerectangle($im, 0, 0, $largura-1 , $altura-1 ,$corMoldura); 

//Eixos
imageline($im,38,20,38,293,$linhas); //y
imageline($im, 28,280,610,280, $linhas); //x

//Função para desenhar barras no grafico (distancia, dia, imagem, unidade, cor da barra, cor da borda)
function desenha_barra($distancia, $pos, $im, $unidadeDST, $corBarra, $corBorda)
{

//if($distancia <0) {$distancia =10;}

$pos_i = 21 + (18 * $pos);
$pos_f = 38 + (18 * $pos);
$dist_ = 290 - $unidadeDST * $distancia;

imagefilledrectangle($im, $pos_i, $dist_, $pos_f,280,$corBarra); 
imagerectangle($im, $pos_i, $dist_, $pos_f,280,$corBorda); 
$texto_barra = $distancia . " km";
imagestringup($im,2,$pos_i,180,$texto_barra ,$black);
}

for($dias=1;$dias<=30;$dias++)
{
if($_SESSION['distancia_ultimos']['dist'][$dias] != 0)
{
	desenha_barra($_SESSION['distancia_ultimos']['dist'][$dias],$dias,$im,$unidadeDST,$barras,$branco);
}
}

for($x=1; $x<=30; $x++)
{
imageline($im, 38+$x*18,275,38+$x*18,285,$linhas);
$data_ = 	date("d", mktime(0,0,0,date("m"),date("d")-30+$x,date("Y")));
imagestring($im, 3,24 +$x*18,280,$data_,$moldura);

}

//Escrever o tamanho maximo e o tamanho metade
imagestring($im,2,18,20,$maior_distancia,$preto);
imagestring($im,2,18,$unidadeDST*$maior_distancia/2+8,$maior_distancia/2,$preto);
//Legenda esquerda
imagestringup($im,2,0,180,"Distancia em Km",$black);
//Linhas dos tamanhos (maximo e metade)
imageline($im,33,20,43,20,$linhas);
imageline($im,33,155,43,155,$linhas);

//Titulo do gráfico - 
imagestring($im,6,220,3,"Distância (30 dias)", $preto);
//Imprimir o nome de utilizador
$user = $_SESSION['user'];
imagestring($im,3,0,0,$user,$cUser);

//output image

Imagepng($im);
//Clean up
ImageDestroy($im);
//$_SESSION['distancia_ultimos']['dist'] = array();

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

header logo no incio, seguido de session start e funfa ;)

e convem descomentar o $maior_distancia

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

o header está no inicio porque o mudei agora para experimentar umas cenas, ele tem estado no fim.

o $maior_distancia se eu o descomentar o grafico já aparece porque deixa de se fazer uma divisão por zero (devido a não conseguir ter dadnos no $_SESSION)... mas isso não me resolve o problema de se perderem os dados do $_SESSION para toda a página.

O que me faz com que os $_SESSION não se perca é comentando o session_start() do grafico (do código que postei em cima), mas obviamente que o grafico continua a não funcionar devidamente por não ter nada em $_SESSION ;)

Agradeço desde já a vossa ajuda  :D

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

No inicio do ficheiro.

Mas atenção que isto funciona perfeitamente com PHP 5.1.6, mas no 5.2.5 já não. Agora se é alguma configuração que não está a gostar do meu código ou se é algum bug, já não sei :\

0

Partilhar esta mensagem


Link 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