+ Responder ao Tópico



  1. #1

    Angry php, linguagem ridicula - session_start() com erro.

    nossa! Como é que pode-se usar uma linguagem dessas e dizer que presta? Apresentar erro apenas por que usa-se session_start() entre um codigo html . Um simples espaço em branco ja ferra com tudo. Eu tambem uso php e as vezes fico indignado com algumas limitações ridiculas, saudades do bom e velho asp que mata a pau isso tudo. Pelo menos no quisito simplicidade de programar, hoje em dia tempo é grana e ficar perdendo tempo com bobagens é ridiculo. Como dizem, se quer bem feito tem que pagar e não é a toa que o linux é gratis. Alguem pode me explicar por que esse erro aparece? Esta tudo certo, declarado uma vez, não tem include, esta no topo de tudo, ja verifiquei e reverifiquei mas o erro insiste em aparecer..

  2. #2
    MODERADOR-CHEFE Avatar de osmano807
    Ingresso
    Aug 2008
    Localização
    Araguari - Minas Gerais
    Posts
    1.980
    Posts de Blog
    5

    Padrão Re: php, linguagem ridicula - session_start() com erro.

    PHP: session_start - Manual
    Este warning (E_NOTICE) aparece quando a sessão já está iniciada (já chamaram session_start antes do ponto atual no arquivo).

    Nos comentários existe um singleton que é uma encapsulação do $_SESSION, que deve resolver este seu warning.
    PHP: session_start - Manual
    Código php:
    <?php
     
    /*
        Use the static method getInstance to get the object.
    */
     
    class Session
    {
        const SESSION_STARTED = TRUE;
        const SESSION_NOT_STARTED = FALSE;
     
        // The state of the session
        private $sessionState = self::SESSION_NOT_STARTED;
     
        // THE only instance of the class
        private static $instance;
     
     
        private function __construct() {}
     
     
        /**
        *    Returns THE instance of 'Session'.
        *    The session is automatically initialized if it wasn't.
        *    
        *    @return    object
        **/
     
        public static function getInstance()
        {
            if ( !isset(self::$instance))
            {
                self::$instance = new self;
            }
     
            self::$instance->startSession();
     
            return self::$instance;
        }
     
     
        /**
        *    (Re)starts the session.
        *    
        *    @return    bool    TRUE if the session has been initialized, else FALSE.
        **/
     
        public function startSession()
        {
            if ( $this->sessionState == self::SESSION_NOT_STARTED )
            {
                $this->sessionState = session_start();
            }
     
            return $this->sessionState;
        }
     
     
        /**
        *    Stores datas in the session.
        *    Example: $instance->foo = 'bar';
        *    
        *    @param    name    Name of the datas.
        *    @param    value    Your datas.
        *    @return    void
        **/
     
        public function __set( $name , $value )
        {
            $_SESSION[$name] = $value;
        }
     
     
        /**
        *    Gets datas from the session.
        *    Example: echo $instance->foo;
        *    
        *    @param    name    Name of the datas to get.
        *    @return    mixed    Datas stored in session.
        **/
     
        public function __get( $name )
        {
            if ( isset($_SESSION[$name]))
            {
                return $_SESSION[$name];
            }
        }
     
     
        public function __isset( $name )
        {
            return isset($_SESSION[$name]);
        }
     
     
        public function __unset( $name )
        {
            unset( $_SESSION[$name] );
        }
     
     
        /**
        *    Destroys the current session.
        *    
        *    @return    bool    TRUE is session has been deleted, else FALSE.
        **/
     
        public function destroy()
        {
            if ( $this->sessionState == self::SESSION_STARTED )
            {
                $this->sessionState = !session_destroy();
                unset( $_SESSION );
     
                return !$this->sessionState;
            }
     
            return FALSE;
        }
    }
     
    /*
        Examples:
    */
     
    // We get the instance
    $data = Session::getInstance();
     
    // Let's store datas in the session
    $data->nickname = 'Someone';
    $data->age = 18;
     
    // Let's display datas
    printf( '<p>My name is %s and I\'m %d years old.</p>' , $data->nickname , $data->age );
     
    /*
        It will display:
     
        Array
        (
            [nickname] => Someone
            [age] => 18
        )
    */
     
    printf( '<pre>%s</pre>' , print_r( $_SESSION , TRUE ));
     
    // TRUE
    var_dump( isset( $data->nickname ));
     
    // We destroy the session
    $data->destroy();
     
    // FALSE
    var_dump( isset( $data->nickname ));
     
    ?>

    Só para constar, o software que roda este portal é feito em PHP, e roda em Linux. E nem por isso dá esses erros.

    ---
    EDIT: Poste a mensagem de erro completa, creio que você está é com outro problema: chamando session depois dos headers já foram mandados.
    Última edição por osmano807; 23-04-2011 às 11:55.

  3. #3

    Padrão Re: php, linguagem ridicula - session_start() com erro.

    Não saber programar é um erro, falar mal da linguagem é por que não se conhece sua documentação. A verdade que cada pessoa programa na linguagem que mais gosta, mas nem todos tem saco de ler a documentação. Aposto que a maioria quando é solicitado para desenvolver um software, ou site já vai ligando o compilador e digitando. Nada de modelar antes, ou desenvolver as fases e testar cada parte, e o principal documentar.

  4. #4

    Padrão Re: php, linguagem ridicula - session_start() com erro.

    Citação Postado originalmente por biohazzard Ver Post
    Não saber programar é um erro, falar mal da linguagem é por que não se conhece sua documentação. A verdade que cada pessoa programa na linguagem que mais gosta, mas nem todos tem saco de ler a documentação. Aposto que a maioria quando é solicitado para desenvolver um software, ou site já vai ligando o compilador e digitando. Nada de modelar antes, ou desenvolver as fases e testar cada parte, e o principal documentar.
    Falou a mais pura verdade, muitos nem conhecem direito sobre logica, pegam receita de bolo na internet usam CTRL+C.

  5. #5

    Padrão Re: php, linguagem ridicula - session_start() com erro.

    Troca para uma linguagem que vc saiba o que esta fazendo e goste do que faz. Nao existe a linguagem perfeita, existem desenvolvedores que sabem qual liguagem sera melhor para projeto X ou Y.

  6. #6

    Padrão Re: php, linguagem ridicula - session_start() com erro.

    devia falar que o PHP não presta para o pessoal do facebook, ny times, yahoo, wikipedia e varios outros nomes poderosos da web como o site da casa branca que é um dos mais atacados do mundo.
    acho que o erro não é na linguagem, mais quem usa ela que não tem conhecimento suficiente.

  7. #7

    Padrão Re: php, linguagem ridicula - session_start() com erro.

    session_start(), header(), etc... Todos tem que ser enviados como header em um cabecalho HTTP... Pra isso, eles tem que ser a primeira saida da pagina.

    Se voce colocar um espaco antes da tag <?php ?> voce esta mandando uma saida (o tal espaco) e logo, o header estaria sendo enviado depois de uma saida... O que nao faz absolutamente nenhum sentido...

    Eu perdi meu tempo respondendo isso mas tenho certeza que voce só postou esta merda para causar confusão... (desculpem o meu francês.)

  8. #8

    Padrão Re: php, linguagem ridicula - session_start() com erro.

    não saber usar session e php, e falar mal do linux por ser gratuito? você então não precisa mais deste forum pois o mesmo como ja disseram é em php, linux e gratuito.

  9. #9
    MODERADOR-CHEFE Avatar de osmano807
    Ingresso
    Aug 2008
    Localização
    Araguari - Minas Gerais
    Posts
    1.980
    Posts de Blog
    5

    Padrão Re: php, linguagem ridicula - session_start() com erro.

    O cara nem voltou mais...
    Mas a malhação continua...
    Tópico trancado.