Ir para conteúdo


Revista PROGRAMAR - Edição 45 (Maio 2014): Download já disponível! Visita também o novo website da revista.

- - - - -

[PHP]Sistema de Submissão de Ficheiros v1.0


  • Por favor inicie sessão para responder
21 respostas a este tópico

#1 deathseeker25

deathseeker25

    Fundador

  • Membro
  • PipPipPipPipPipPipPip
  • 6733 mensagens

Publicado 25 de Dezembro de 2006 - 23:00

Boas,

Decidi criar este sistema muito devido ao meu trabalho de grupo da disciplina de Área Projecto, que consistirá num CMS. Noutra ocasião apresentarei o projecto devidamente. Este script serviu também para aprender um pouco de Programação Orientada a Objectos no PHP. Devo dizer que as vantagens estão á vista na própria leitura do código e na facilidade com que o programador tem sempre que precisa de corrigir erros.

O objectivo do script é fazer com que os membros do grupo de trabalho possam submeter os ficheiros que vão escrevendo para a devida pasta aqui no servidor caseiro. Estive três dias á volta deste script para chegar a este resultado, no entanto pretendo fazer algumas melhorias nos próximos dias e muito dependendo das sugestões que me forem dando a todos os níveis.

Código (PHP):
/********* Sistema de Submissão de Ficheiros v. 1.0 *************
escrito por Rui Maia <deathseeker25@portugal-a-programar.org>****
*********************<lavrakid25@gmail.com> *********************
*****************************************************************
****************************************************************/

error_reporting(E_ALL);

class Pagina {

var $corDeFundo = '#FFFFFF';
var $widthTabela = 531;
var $heightTabela = 129;
var $corTexto = '#000000';
var $pasta;


function Pagina(){
}
function define_corDeFundo($cor)
{
$this->corDeFundo=$cor;
}
function define_widthTabela($width)
{
$this->widthTabela=$width;
}
function define_heightTabela($height)
{
$this->heightTabela=$height;
}
function define_corTexto($cor)
{
$this->corTexto=$cor;
}
function define_destino($destino)
{
$this->destino=$destino;
}
function enviaFicheiro($pasta)
{
if(isset($pasta)) //se a pasta for escolhida através de código
{
$this->pasta=$pasta;
}
else
{
$PastaRui= "Rui";
$PastaRicardo= "Ricardo";
$PastaAndre= "Andre";
$PastaMichel= "Michel";
$PastaMarcelo= "Marcelo";

if($_POST['pasta'] == $PastaRui)
{
if(is_dir($_SERVER['DOCUMENT_ROOT'] . "/files/rui"))
{
$pasta = $PastaRui;
}
else
{
$pasta = $_SERVER['DOCUMENT_ROOT'] . "\files\rui";
mkdir($pasta,0777,TRUE);
$pasta = $PastaRui;
}
}
if($_POST['pasta'] == $PastaRicardo)
{
if(is_dir($_SERVER['DOCUMENT_ROOT'] . "/files/ricardo"))
{
$pasta = $PastaRicardo;
}
else
{
$pasta = $_SERVER['DOCUMENT_ROOT'] . "\files\ricardo";
mkdir($pasta,0777,TRUE);
$pasta = $PastaRicardo;
}
}
if($_POST['pasta'] == $PastaAndre)
{
if(is_dir($_SERVER['DOCUMENT_ROOT'] . "/files/andre"))
{
$pasta = $PastaAndre;
}
else
{
$pasta=$_SERVER['DOCUMENT_ROOT'] . "\files\ricardo";
mkdir($pasta,0777,TRUE);
$pasta= $PastaAndre;
}
}
if($_POST['pasta'] == $PastaMichel)
{
if(is_dir($_SERVER['DOCUMENT_ROOT'] . "/files/michel"))
{
$pasta = $PastaMichel;
}
else
{
$pasta=$_SERVER['DOCUMENT_ROOT'] . "\files\michel";
mkdir($pasta,0777,TRUE);
$pasta= $PastaMichel;
}
}
if($_POST['pasta'] == $PastaMarcelo)
{
if(is_dir($_SERVER['DOCUMENT_ROOT'] . "/files/marcelo"))
{
$pasta = $PastaMarcelo;
}
else
{
$pasta=$_SERVER['DOCUMENT_ROOT'] . "\files\marcelo";
mkdir($pasta,0777,TRUE);
$pasta = $PastaMarcelo;
}
}
}
if(!empty($_FILES['enviarFicheiro']))
{
$destino = $_SERVER['DOCUMENT_ROOT'] . "/files/" . $pasta . "/";
$destino.= $_FILES['enviarFicheiro']['name'];
}
if(move_uploaded_file($_FILES['enviarFicheiro']['tmp_name'], $destino))
{
echo '<span class="Estilo1">O arquivo foi enviado com sucesso!
<br />
Se pretende enviar outro arquivo, clique <a href="upload_ficheiros.php">aqui</a>.</span>';
}

else
{
echo 'O arquivo não pode ser enviado!';
}
}
function mostraPagina()
{
echo sprintf('<head><style type="text/css">
<!--
body,td,th {
color: #000000;
}
body {
font-family: Verdana, sans-serif;
color: white;
background-image: url(fundo.jpg);
background-repeat: repeat;
font-size: 12px;
background-color: #FFFFFF;
}
-->


p {
padding-left: 20px;
}

h1, h2 {
padding-left: 10px;
}

#page {
margin: 50px 25%;
}

#enviar_ficheiro ul
{
list-style: none;
padding: 0px;
margin: 0px 0px 0px 2px;
}

#enviar_ficheiro li
{
float: left;
padding: 0px 2px 0px 2px;
}

#enviar_ficheiro li a
{
background-color: silver;
font-size: 9px;
height: 18px;
float: left;
width: 96px;
border: 1px solid black;
font-weight: bold;
text-decoration: none;
text-align: center;
}

#banner {
background-color: silver;
width: 600px;
height: 75px;
border: 1px solid black;
padding: 4px;
margin: 4px;
}

#news {
margin: 5px;
font-size: 9px;
border: 1px solid black;
background-color: silver;
}

#header {
border: 1px solid black;
background-color: white;
height: 117px;
width: 618px;
}

h1 {
font-size: 12px;
}

#body {
margin-top: 35px;
background-color: white;
color: black;
border: 1px solid black;
width: 618px;
}

#footer {
margin-top: 5px;
font-size: 9px;
color: black;
font-weight: bold;
border: 1px solid black;
background-color: white;
width: 618px;
text-align: center;
}

#copy {
margin: 4px 4px;
border: 1px solid black;
background-color: silver;
}

a:link, a:visited, a:hover, a:active {color:black; text-decoration:none;}





.Estilo1 {color: #000000}
</style>
</head>
<body>
<div id="pagina">
<div id="banner"></div>
<div id="enviarFicheiro">
<form name="enviar" enctype="multipart/form-data" method="post" action="">
<div align="justify"><span class="Estilo1">Ficheiro a enviar:</span>
<input type="file" name="enviarFicheiro">
</div>
<p align="justify" class="Estilo1">Quero enviar o ficheiro para a pasta do:
<select name="pasta">
<option value="Rui">Rui</option>
<option value="Ricardo">Ricardo</option>
<option value="Michel">Michel</option>
<option value="Marcelo">Marcelo</option>
<option value="Andr&eacute;">Andr&eacute;</option>
</select>
</p>
<p align="justify">&nbsp;</p>
<p align="justify">
<input type="submit" name="Enviar">
</p>
</form>
</div>
<div id="footer">
<div id="copy">
<p>deathseeker25 Productions</p>
</div>
</div>
</div>


</body>
',$this->corTexto,
$this->corDeFundo,
$this->widthTabela,
$this->heightTabela);
}

}
$pagina=new Pagina();
$pagina->mostraPagina();
if($_POST)
{
$pagina->enviaFicheiro();
}

Espero todo o tipo de comentários e sugestões... ;)

#2 Triton

Triton

    Stack Overflow

  • Membro
  • PipPipPipPipPipPipPip
  • 8490 mensagens

Publicado 25 de Dezembro de 2006 - 23:10

Estive a analisar um pouco o código e vi que repetes muito código para cada pessoa.

O que eu faria era criar um array com todas as pessoas e depois dependendo da pessoa escolhida ia buscar as informações ao array de forma a tornar o código mais compacto. ;)

#3 Hipnoted

Hipnoted

    Stack Overflow

  • Membro
  • PipPipPipPipPipPipPip
  • 5748 mensagens

Publicado 25 de Dezembro de 2006 - 23:11

Pelo que pude perceber isto assemelha-se a aquilo que eu ando sempre a pensar há algumtempo e até já dei uma sugestão a um elemento do fórum para fazer, que é um controlo de versões de ficheiros on-line.

Acho que um servidor desse sempre a funcionar 24/24 horas daria mito jeito a qualquer um.  Ainda a semana passada tive de ir todos os dias para a faculdade por causa dum trabalho e para garantir que quando chegasse a casa tinha a versão do trabalho que fiz enviava um mail para mim mesmo.
Ora se tivesse um sistema on-line de controlo de versões escusava de entupir a minha caixa de correio ;), mas nesse caso teria de ser um sistema com bastante segurança para garantir que ninguém veja os meus ficheiros.

Finalizando, bom trabalho! :P

#4 Rui Carlos

Rui Carlos

    Stack Overflow

  • Staff
  • 12075 mensagens

Publicado 25 de Dezembro de 2006 - 23:26

Ver MensagemHipnoted, em 25 de Dezembro de 2006 - 23:11, disse:

Pelo que pude perceber isto assemelha-se a aquilo que eu ando sempre a pensar há algumtempo e até já dei uma sugestão a um elemento do fórum para fazer, que é um controlo de versões de ficheiros on-line.

Acho que um servidor desse sempre a funcionar 24/24 horas daria mito jeito a qualquer um.  Ainda a semana passada tive de ir todos os dias para a faculdade por causa dum trabalho e para garantir que quando chegasse a casa tinha a versão do trabalho que fiz enviava um mail para mim mesmo.
Ora se tivesse um sistema on-line de controlo de versões escusava de entupir a minha caixa de correio ;), mas nesse caso teria de ser um sistema com bastante segurança para garantir que ninguém veja os meus ficheiros.

basicamente precisas de um servidor de SVN ou CVS (ou outro parecido)...

#5 deathseeker25

deathseeker25

    Fundador

  • Membro
  • PipPipPipPipPipPipPip
  • 6733 mensagens

Publicado 25 de Dezembro de 2006 - 23:56

Ver MensagemTriton, em 25 de Dezembro de 2006 - 23:10, disse:

Estive a analisar um pouco o código e vi que repetes muito código para cada pessoa.

O que eu faria era criar um array com todas as pessoas e depois dependendo da pessoa escolhida ia buscar as informações ao array de forma a tornar o código mais compacto. ;)

Sim, de facto optei por apressar as coisas nesse aspecto e fazer tudo muito de forma simples mas longa e repetitiva. Pensei exactamente em criar um array com as pessoas e fazer a repetição do processo através de um ciclo for, mas estava com vontade de ver o resultado final e portanto apressei-me a escrever código bruto. Resultado: mais linhas de código, logo mais confusão.

Já agora, Triton, podes demonstrar na prática de que forma aquilo em que pensaste?

Ver MensagemHipnoted, em 25 de Dezembro de 2006 - 23:11, disse:

Pelo que pude perceber isto assemelha-se a aquilo que eu ando sempre a pensar há algumtempo e até já dei uma sugestão a um elemento do fórum para fazer, que é um controlo de versões de ficheiros on-line.

Acho que um servidor desse sempre a funcionar 24/24 horas daria mito jeito a qualquer um.  Ainda a semana passada tive de ir todos os dias para a faculdade por causa dum trabalho e para garantir que quando chegasse a casa tinha a versão do trabalho que fiz enviava um mail para mim mesmo.
Ora se tivesse um sistema on-line de controlo de versões escusava de entupir a minha caixa de correio :D, mas nesse caso teria de ser um sistema com bastante segurança para garantir que ninguém veja os meus ficheiros.

Finalizando, bom trabalho! :D

Hipnoted, esse é um projecto-futuro do P@P já pensado há algum tempo. Pessoalmente vejo grande utilidade nessa ferramenta, já que será mais um motivo para que os utilizadores da comunidade passem mais tempo por cá e a trabalhar (uma boa percentagem dos membros do P@P passa cá demasiado tempo a "ver coisas").
Estive a estudar algumas alternativas, de modo a não estarmos a reinventar a roda, e realmente existe a possibilidade de construír uma plataforma integrada onde as coisas funcionem. Digamos que, o objectivo, no fundo, será criar um sourceforge nacional...na primeira fase. :P

#6 djthyrax

djthyrax

    Stack Overflow

  • Moderador
  • PipPipPipPipPipPipPip
  • 15513 mensagens

Publicado 26 de Dezembro de 2006 - 01:18

só não gosto duma coisa à partida, código não identado ;)
enfim, acho que tens aí uns qts erros "graves" (\files\michel for exemplo) e usas um if para cada variável pre definida. era preferível carregar os users para uma array e dps usares um foreach($arr as $user => $homedir).
E por agora é só isso, li o código só na diagonal.

#7 kingless

kingless

    Unsigned User

  • Membro
  • PipPipPipPipPipPip
  • 1184 mensagens

Publicado 26 de Dezembro de 2006 - 12:49

Sugestões
1º Livra-te dos ifs  :w00t2:
2º Tenta simplificar o código

#8 deathseeker25

deathseeker25

    Fundador

  • Membro
  • PipPipPipPipPipPipPip
  • 6733 mensagens

Publicado 26 de Dezembro de 2006 - 12:50

Ver Mensagemdjthyrax, em 26 de Dezembro de 2006 - 01:18, disse:

só não gosto duma coisa à partida, código não identado :P
enfim, acho que tens aí uns qts erros "graves" (\files\michel for exemplo) e usas um if para cada variável pre definida. era preferível carregar os users para uma array e dps usares um foreach($arr as $user => $homedir).
E por agora é só isso, li o código só na diagonal.

O código por acaso estava identado. E muito bem identado, acredita. ;) Ficou assim logo que o copiei para o post, mas no ficheiro que estou a alterar está realmente bem identado.

Quanto á sugestão de carregar num array e utilizar o foreach, achei uma boa ideia. Vou experimentar. :D

#9 kingless

kingless

    Unsigned User

  • Membro
  • PipPipPipPipPipPip
  • 1184 mensagens

Publicado 26 de Dezembro de 2006 - 13:07

Acho que devias colocar os users num array... deixa-me tentar mostrar-te no que estou a pensar

Código (PHP):
class Pagina {
     
       var $PastasDir = $_SERVER['DOCUMENT_ROOT'] . "/files/";
       var $usuarios = array( 'Rui', 'Ricardo', 'Andre', 'Michel', 'Marcelo' );

function EnviarFicheiros () {

foreach( $this->usuarios as $user ) {

if( $_POST['pasta'] == $user ) {

if(is_dir( $this->PastasDir.$user ) ) {

$pasta = $user;

} else {

$pasta = $this->PastasDir.$_POST['pasta'];

mkdir($pasta,0777,TRUE);

    }
   }
 }
}
}


#10 deathseeker25

deathseeker25

    Fundador

  • Membro
  • PipPipPipPipPipPipPip
  • 6733 mensagens

Publicado 26 de Dezembro de 2006 - 13:36

Eu tinha tentado fazer assim:

Código (PHP):
$array=array("$PastaRui" => "rui",
                                                 "$PastaRicardo" => "ricardo",
                                                 "$PastaAndre" => "andre",
                                                 "$PastaMichel" => "michel",
                                                 "$PastaMarcelo" => "marcelo"
                                                 );
                       
                        foreach($array as $utilizador => $homedir)
                        {
                                if($_POST['pasta'] == $utilizador)
                                {
                                        if(is_dir($_SERVER['DOCUMENT_ROOT'] . "/files/" . $homedir))
                                        {
                                                $pasta=$utilizador;
                                        }
                                        else
                                        {
                                                $pasta = $_SERVER['DOCUMENT_ROOT'] . "\files\\" . $homedir;
                                                mkdir($pasta,0777,TRUE);
                                                $pasta = $utilizador;
                                        }
                                }
                       
                        } //fim do foreach
                }       //fim do else...

Mas não me estava a funcionar. Foi então que fiz refresh a este tópico e vi o snippet que tinhas postado e decidi experimentar. Alterei para o teu código e a página fica toda em branco. Deve ser algum problema relacionado com a variável $user... ;)

Aqui fica o código actual da função:

Código (PHP):
function enviaFicheiro()
        {
                if(isset($pasta)) //se a pasta for escolhida através de código
                {
                        $this->pasta=$pasta;
                }      
                else
                {
                        foreach( $this->utilizadores as $user )
                        {
                                if( $_POST['pasta'] == $user )
                                {
                                        if(is_dir( $this->PastasDir.$user ) )
                                        {
                                                $pasta = $user;
                                        }
                                        else
                                        {
                                                $pasta = $this->PastasDir.$_POST['pasta'];
                                                mkdir($pasta,0777,TRUE);
                                        }
                                }
                        }
                }                      
                       
                if(!empty($_FILES['enviarFicheiro']))
                {
                        $destino = $_SERVER['DOCUMENT_ROOT'] . "/files/" . $pasta . "/";
                        $destino.= $_FILES['enviarFicheiro']['name'];
                }
                if(move_uploaded_file($_FILES['enviarFicheiro']['tmp_name'], $destino))
                {
                        echo '<span class="Estilo1">O arquivo foi enviado com sucesso!
                                <br />
                                Se pretende enviar outro arquivo, clique <a href="upload_ficheiros.php">aqui</a>.</span>';
                }
               
                else
                {
                        echo 'O arquivo não pode ser enviado!';
                }
        }


#11 kingless

kingless

    Unsigned User

  • Membro
  • PipPipPipPipPipPip
  • 1184 mensagens

Publicado 26 de Dezembro de 2006 - 13:59

Tenta alterar esta linha...

Código (PHP):
//...
$pasta = $this->PastasDir.$_POST['pasta'];
mkdir($pasta,0777,TRUE);
//...

fica assim:

Código (PHP):
//...
$pasta = $this->PastasDir.$user;
mkdir($pasta,0777,TRUE);
$pasta = $user;
//...


#12 deathseeker25

deathseeker25

    Fundador

  • Membro
  • PipPipPipPipPipPipPip
  • 6733 mensagens

Publicado 26 de Dezembro de 2006 - 14:03

Continua a não apresentar qualquer output (a página fica toda em branco).

Já tentei outras formas e o resultado é o mesmo.

Vou colocar aqui todo o código, no caso de quereres dar uma ajuda e assim tens acesso a todo o conteúdo do ficheiro:

Código (PHP):
<?php
/*********  Sistema de Submissão de Ficheiros v. 1.0 *************
escrito por Rui Maia <deathseeker25@portugal-a-programar.org>****
*********************<lavrakid25@gmail.com> *********************
*****************************************************************
****************************************************************/

error_reporting(E_ALL ^ E_NOTICE);

class Pagina {

var $corDeFundo = '#FFFFFF';
var $widthTabela = 531;
var $heightTabela = 129;
var $corTexto = '#000000';
var $pasta;
var $PastasDir = $_SERVER['DOCUMENT_ROOT'] . "/files/";
var $utilizadores = array( 'Rui', 'Ricardo', 'Andre', 'Michel', 'Marcelo' );
       
        function Pagina(){
        }
        function define_corDeFundo($cor)
        {
                $this->corDeFundo=$cor;
        }
        function define_widthTabela($width)
        {
                $this->widthTabela=$width;
        }
        function define_heightTabela($height)
        {
                $this->heightTabela=$height;
        }
        function define_corTexto($cor)
        {
                $this->corTexto=$cor;
        }
        function define_destino($destino)
        {
                $this->destino=$destino;
        }
        function enviaFicheiro()
        {
                if(isset($pasta)) //se a pasta for escolhida através de código
                {
                        $this->pasta=$pasta;
                }      
                else
                {
                        foreach( $this->utilizadores as $user )
                        {
                                if( $_POST['pasta'] == $user )
                                {
                                        if(is_dir( $this->PastasDir.$user ) )
                                        {
                                                $pasta = $user;
                                        }
                                        else
                                        {
                                                $pasta = $this->PastasDir.$user;
                                                mkdir($pasta,0777,TRUE);
                                                $pasta = $user;
                                        }
                                }
                        }
                }                      
                       
                if(!empty($_FILES['enviarFicheiro']))
                {
                        $destino = $_SERVER['DOCUMENT_ROOT'] . "/files/" . $pasta . "/";
                        $destino.= $_FILES['enviarFicheiro']['name'];
                }
                if(move_uploaded_file($_FILES['enviarFicheiro']['tmp_name'], $destino))
                {
                        echo '<span class="Estilo1">O arquivo foi enviado com sucesso!
                                <br />
                                Se pretende enviar outro arquivo, clique <a href="upload_ficheiros.php">aqui</a>.</span>';
                }
               
                else
                {
                        echo 'O arquivo não pode ser enviado!';
                }
        }
        function mostraPagina()
        {
                echo sprintf('<head><style type="text/css">
<!--
body,td,th {
        color: #000000;
}
body {
        font-family: Verdana, sans-serif;
        color: white;
        background-image: url(fundo.jpg);
        background-repeat: repeat;
        font-size: 12px;
        background-color: #FFFFFF;
}
-->


p {
   padding-left: 20px;
}

h1, h2 {
   padding-left: 10px;
}

#page {
        margin: 50px 25%;
}

#enviar_ficheiro ul
{
        list-style: none;
        padding: 0px;
        margin: 0px 0px 0px 2px;
}

#enviar_ficheiro li
{
        float: left;
        padding: 0px 2px 0px 2px;
}

#enviar_ficheiro li a
{
        background-color: silver;
        font-size: 9px;
        height: 18px;
        float: left;
        width: 96px;
        border: 1px solid black;
        font-weight: bold;
        text-decoration: none;
        text-align: center;
}

#banner {
        background-color: silver;
        width: 600px;
        height: 75px;
        border: 1px solid black;
        padding: 4px;
        margin: 4px;
}

#news {
        margin: 5px;
        font-size: 9px;
        border: 1px solid black;
        background-color: silver;
}

#header {
        border: 1px solid black;
        background-color: white;
        height: 117px;
        width: 618px;
}

h1 {
        font-size: 12px;
}

#body {
        margin-top: 35px;
        background-color: white;
        color: black;
        border: 1px solid black;
        width: 618px;
}

#footer {
        margin-top: 5px;
        font-size: 9px;
        color: black;
        font-weight: bold;
        border: 1px solid black;
        background-color: white;
        width: 618px;
        text-align: center;
}

#copy {
        margin: 4px 4px;
        border: 1px solid black;
        background-color: silver;
}

a:link, a:visited, a:hover, a:active {color:black; text-decoration:none;}





.Estilo1 {color: #000000}
</style>
</head>
<body>
<div id="pagina">
<div id="banner"></div>
<div id="enviarFicheiro">
<form name="enviar" enctype="multipart/form-data" method="post" action="">
                       <div align="justify"><span class="Estilo1">Ficheiro a enviar:</span>                          
                         <input type="file" name="enviarFicheiro">
                                                </div>
<p align="justify" class="Estilo1">Quero enviar o ficheiro para a pasta do:
                                  <select name="pasta">
                                    <option value="Rui">Rui</option>
                                    <option value="Ricardo">Ricardo</option>
                                    <option value="Michel">Michel</option>
                                    <option value="Marcelo">Marcelo</option>
                                    <option value="Andr&eacute;">Andr&eacute;</option>
                              </select>
</p>
     <p align="justify">&nbsp;</p>
                       <p align="justify">
                         <input type="submit" name="Enviar">
                              </p>
</form>
</div>
<div id="footer">
                                        <div id="copy">
                                                <p>deathseeker25 Productions</p>
                                        </div>
 </div>
</div>

 
</body>
',$this->corTexto,
$this->corDeFundo,
$this->widthTabela,
$this->heightTabela);
}

}
$pagina=new Pagina();
$pagina->mostraPagina();
if($_POST)
{
        $pagina->enviaFicheiro();
}

?>


#13 kingless

kingless

    Unsigned User

  • Membro
  • PipPipPipPipPipPip
  • 1184 mensagens

Publicado 26 de Dezembro de 2006 - 14:10

Acho que o erro esta na função...

Altera isto
Código (PHP):
function enviaFicheiro()

Para
Código (PHP):
function enviaFicheiro($pasta)


#14 deathseeker25

deathseeker25

    Fundador

  • Membro
  • PipPipPipPipPipPipPip
  • 6733 mensagens

Publicado 26 de Dezembro de 2006 - 14:48

kingless, o problema não estava aí. Já tinha tentado resolver através daí, mas realmente o problema estava nesta linha:

Código (PHP):
var $PastasDir = $_SERVER['DOCUMENT_ROOT'] . "/files/";

Para apresentar uma página em branco, era porque realmente havia problema com as variáveis da classe, ou então com uma das funções. Como as funções, aparentemente estavam todas a funcionar bem, então o problema só poderia residir nas variáveis da classe. O que resolvi fazer foi verificar em qual das duas novas variáveis da classe estava o problema, pelo que apaguei esta variável e finalmente foi produzido algum output.

Assim sendo, preferi passar a variável para dentro da função e cheguei  a este snippet...

Código (PHP):
<?php
/*********  Sistema de Submissão de Ficheiros v. 1.0 *************
escrito por Rui Maia <deathseeker25@portugal-a-programar.org>****
*********************<lavrakid25@gmail.com> *********************
*****************************************************************
****************************************************************/

error_reporting(E_ALL ^ E_NOTICE);

class Pagina {

var $corDeFundo = '#FFFFFF';
var $widthTabela = 531;
var $heightTabela = 129;
var $corTexto = '#000000';
var $pasta;
var $utilizadores = array( 'Rui', 'Ricardo', 'Andre', 'Michel', 'Marcelo' );
       
        function Pagina(){
        }
        function define_corDeFundo($cor)
        {
                $this->corDeFundo=$cor;
        }
        function define_widthTabela($width)
        {
                $this->widthTabela=$width;
        }
        function define_heightTabela($height)
        {
                $this->heightTabela=$height;
        }
        function define_corTexto($cor)
        {
                $this->corTexto=$cor;
        }
        function define_destino($destino)
        {
                $this->destino=$destino;
        }
        function enviaFicheiro($pasta)
        {
                if(isset($pasta)) //se a pasta for escolhida através de código
                {
                        $this->pasta=$pasta;
                }      
                else
                {
                        $PastasDir = $_SERVER['DOCUMENT_ROOT'] . "/files/";
                       
                        foreach( $this->utilizadores as $user )
                        {
                                if( $_POST['pasta'] == $user )
                                {
                                        if(is_dir( $PastasDir . $user ) )
                                        {
                                                $pasta = $user;
                                        }
                                        else
                                        {
                                                $pasta = $PastasDir . $user;
                                                mkdir($pasta,0777,TRUE);
                                                $pasta = $user;
                                        }
                                }
                        }
                }                      
                       
                if(!empty($_FILES['enviarFicheiro']))
                {
                        $destino = $_SERVER['DOCUMENT_ROOT'] . "/files/" . $pasta . "/";
                        $destino.= $_FILES['enviarFicheiro']['name'];
                }
                if(move_uploaded_file($_FILES['enviarFicheiro']['tmp_name'], $destino))
                {
                        echo '<span class="Estilo1">O arquivo foi enviado com sucesso!
                                <br />
                                Se pretende enviar outro arquivo, clique <a href="upload_ficheiros.php">aqui</a>.</span>';
                }
               
                else
                {
                        echo 'O arquivo não pode ser enviado!';
                }
        }
        function mostraPagina()
        {
                echo sprintf('<head><style type="text/css">
<!--
body,td,th {
        color: #000000;
}
body {
        font-family: Verdana, sans-serif;
        color: white;
        background-image: url(fundo.jpg);
        background-repeat: repeat;
        font-size: 12px;
        background-color: #FFFFFF;
}
-->


p {
   padding-left: 20px;
}

h1, h2 {
   padding-left: 10px;
}

#page {
        margin: 50px 25%;
}

#enviar_ficheiro ul
{
        list-style: none;
        padding: 0px;
        margin: 0px 0px 0px 2px;
}

#enviar_ficheiro li
{
        float: left;
        padding: 0px 2px 0px 2px;
}

#enviar_ficheiro li a
{
        background-color: silver;
        font-size: 9px;
        height: 18px;
        float: left;
        width: 96px;
        border: 1px solid black;
        font-weight: bold;
        text-decoration: none;
        text-align: center;
}

#banner {
        background-color: silver;
        width: 600px;
        height: 75px;
        border: 1px solid black;
        padding: 4px;
        margin: 4px;
}

#news {
        margin: 5px;
        font-size: 9px;
        border: 1px solid black;
        background-color: silver;
}

#header {
        border: 1px solid black;
        background-color: white;
        height: 117px;
        width: 618px;
}

h1 {
        font-size: 12px;
}

#body {
        margin-top: 35px;
        background-color: white;
        color: black;
        border: 1px solid black;
        width: 618px;
}

#footer {
        margin-top: 5px;
        font-size: 9px;
        color: black;
        font-weight: bold;
        border: 1px solid black;
        background-color: white;
        width: 618px;
        text-align: center;
}

#copy {
        margin: 4px 4px;
        border: 1px solid black;
        background-color: silver;
}

a:link, a:visited, a:hover, a:active {color:black; text-decoration:none;}





.Estilo1 {color: #000000}
</style>
</head>
<body>
<div id="pagina">
<div id="banner"></div>
<div id="enviarFicheiro">
<form name="enviar" enctype="multipart/form-data" method="post" action="">
                       <div align="justify"><span class="Estilo1">Ficheiro a enviar:</span>                          
                         <input type="file" name="enviarFicheiro">
                                                </div>
<p align="justify" class="Estilo1">Quero enviar o ficheiro para a pasta do:
                                  <select name="pasta">
                                    <option value="Rui">Rui</option>
                                    <option value="Ricardo">Ricardo</option>
                                    <option value="Michel">Michel</option>
                                    <option value="Marcelo">Marcelo</option>
                                    <option value="Andr&eacute;">Andr&eacute;</option>
                              </select>
</p>
     <p align="justify">&nbsp;</p>
                       <p align="justify">
                         <input type="submit" name="Enviar">
                              </p>
</form>
</div>
<div id="footer">
                                        <div id="copy">
                                                <p>deathseeker25 Productions</p>
                                        </div>
 </div>
</div>

 
</body>
',$this->corTexto,
$this->corDeFundo,
$this->widthTabela,
$this->heightTabela);
}

}
$pagina=new Pagina();
$pagina->mostraPagina();
if($_POST)
{
        $pagina->enviaFicheiro();
}

?>


#15 kingless

kingless

    Unsigned User

  • Membro
  • PipPipPipPipPipPip
  • 1184 mensagens

Publicado 26 de Dezembro de 2006 - 15:36

Pois.. o erro estava mesmo na variável da classe $pastasDir ja me tinha esquecido que não se pode utilizar variáveis nas variáveis das classes... (ex: var $cvar = $var; )
Se tivesses error_reporting(E_ALL); no principio da página já tínhamos detectado este erro a mais tempo ;):P (Parse error: syntax error, unexpected T_VARIABLE in...)

#16 jreis

jreis

    Try-Catch User

  • Membro
  • PipPipPipPip
  • 340 mensagens

Publicado 26 de Dezembro de 2006 - 15:56

Um pormenor:

Não deverias declarar a função tipo assim?
Código (PHP):
function enviaFicheiros($pasta = '')
{
...
}

Se o argumento $pasta não for fornecido, será gerado um erro do tipo "Warning", se não me engano, a avisar que o numero de argumentos passado na função não é correcto (uma vez que a função foi declarada com um argumento obrigatório).

#17 kingless

kingless

    Unsigned User

  • Membro
  • PipPipPipPipPipPip
  • 1184 mensagens

Publicado 26 de Dezembro de 2006 - 16:19

bem visto...

#18 deathseeker25

deathseeker25

    Fundador

  • Membro
  • PipPipPipPipPipPipPip
  • 6733 mensagens

Publicado 26 de Dezembro de 2006 - 19:37

Ver Mensagemjreis, em 26 de Dezembro de 2006 - 15:56, disse:

Um pormenor:

Não deverias declarar a função tipo assim?
Código (PHP):
function enviaFicheiros($pasta = '')
{
...
}

Se o argumento $pasta não for fornecido, será gerado um erro do tipo "Warning", se não me engano, a avisar que o numero de argumentos passado na função não é correcto (uma vez que a função foi declarada com um argumento obrigatório).

Muito bem visto. Era o único problema que faltava resolver, o do Warning.

kingless, o error_reporting(E_ALL); estava lá no princípio so script. Não sei porque razão não apontava nenhum erro... ;)

Muito obrigado pela ajuda.

#19 kingless

kingless

    Unsigned User

  • Membro
  • PipPipPipPipPipPip
  • 1184 mensagens

Publicado 26 de Dezembro de 2006 - 20:05

Tu colocaste no principio error_reporting(E_ALL ^ E_NOTICE); não colocaste apenas error_reporting(E_ALL);... quando tu colocas error_reporting(E_ALL ^ E_NOTICE); mostra todos os erros menos as notices foi por isso que não mostrou nada  :P se colocasses error_reporting(E_ALL); aquilo mostraria todos os erros.  ;)

#20 deathseeker25

deathseeker25

    Fundador

  • Membro
  • PipPipPipPipPipPipPip
  • 6733 mensagens

Publicado 26 de Dezembro de 2006 - 20:07

Ver Mensagemkingless, em 26 de Dezembro de 2006 - 20:05, disse:

Tu colocaste no principio error_reporting(E_ALL ^ E_NOTICE); não colocaste apenas error_reporting(E_ALL);... quando tu colocas error_reporting(E_ALL ^ E_NOTICE); mostra todos os erros menos as notices foi por isso que não mostrou nada  :D se colocasses error_reporting(E_ALL); aquilo mostraria todos os erros.  ;)

Sim, de facto tens razão. Foi erro meu... :P