Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Fala pessoal,[/size]
Tenho 14 anos e estou tentando criar um serviço de hospedagem de arquivos(assim como mediafire e 4shared), mas o sistema esta permitindo uploads maiores do que os valores que defini e não consigo encontrar o erro.[/size]
O seguinte arquivo include pega as informações sobre quanto espaço o usuário tem disponível:[/size]
<?php
include "connect.inc";
$un = $_COOKIE["un"];
$pw = $_COOKIE["pw"];
$upid = $_COOKIE["upid"];
$sql = "SELECT SUM(size) AS size FROM files WHERE ownerid='$upid'";
$action = mysqli_query($con,$sql);
$files = "SELECT * FROM files WHERE ownerid='$upid'";
$action2 = mysqli_query($con,$files);
$all = mysqli_num_rows($action2);
$accspace = "SELECT * FROM users WHERE id='$upid'";
$nquery = mysqli_query($con,$accspace);
$result2 = mysqli_fetch_assoc($nquery);
$accsize = $result2["fspace"];
while ($result = mysqli_fetch_assoc($action)) {
$used = $result["size"] / 1048576;
$space = $accsize - $used;
}
?>
E o arquivo que realmente faz o upload é o seguinte:[/size]
<?php
include "cookies.inc";
include "connect.inc";
include "space.inc";
$status = $_GET['s'];
$file_name = $_FILES['arq']['name'];
$file_size = $_FILES['arq']['size'];
$file_type = $_FILES['arq']['type'];
$real_fsize = $file_size;
if($status != "ly"){
header('Location: upload.php');
}
if (isset($_POST['stat'])) {
$privacy = "private";
} else {
$privacy = "public";
}
$destiny = 'users/files/';
$future_file = $destiny.$file_name;
if($space < $real_fsize) {
echo 'O tamanho do arquivo excede o limite para sua conta.<br>';
echo '<a href="upload.php">Voltar</a>';
}
if(file_exists($future_file)){
echo 'Arquivo '. $file_name .' ja existe.<br>';
echo '<a href="upload.php">Voltar</a>';
}
if(move_uploaded_file($_FILES['arq']['tmp_name'], $future_file)){
$sql = "INSERT INTO files (name,size,state,ownerid,url) VALUES ('$file_name','$real_fsize','$privacy','$upid','$future_file')";
$query = mysqli_query($con,$sql);
header('Location: $future_file');
} else {
echo 'Algum erro ocorreu durante o upload.<br>';
echo '<a href="upload.php">Voltar</a>';
}
?>
Alguém pode me dizer o que há de errado?suspeito que isto se deva ao fato das informações relativas a espaço(bytes,mb) estarem como decimal no BD mas não sei se isto esta causando o problema ..[/size] [/size]
Sua idade não interfere
Além do que o ESerra ja citou
tem algumas coisas estranhas pra mim
linha 10
te da o total ja USADO
linha 22
te da o LIMITE que pode usar linha 28
LIVRE = LIMITE - USADO < você pôs isso num loop!?
ESerra:
Fiz isto e a variável space retornou 0.0029029846191406, o que deixa isto mais estranho porque defini, para minha conta, um espaço de 400mb. Estou pensando em refazer tudo, devo ter cometido algum erro de conversão ou cálculo. Eu tenho o site no ar hospedado e também tem um "erro", ele mostra o espaço disponível da seguinte forma: Espaço utilizado:2.8610229492188E-6/2mb.
Você acha que eu ter salvo bytes e mb como decimal no BD pode estar causando isto? porque vejo que a parte que libera ou não o upload do arquivo com base no espaço disponível ta ok:
if($space < $real_fsize) {
echo 'O tamanho do arquivo excede o limite para sua conta.<br>';
echo '<a href="upload.php">Voltar</a>';
}
if(file_exists($future_file)){
echo 'Arquivo '. $file_name .' ja existe.<br>';
echo '<a href="upload.php">Voltar</a>';
}
if(move_uploaded_file($_FILES['arq']['tmp_name'], $future_file)){
$sql = "INSERT INTO files (name,size,state,ownerid,url) VALUES ('$file_name','$real_fsize','$privacy','$upid','$future_file')";
$query = mysqli_query($con,$sql);
} else {
echo 'Algum erro ocorreu durante o upload.<br>';
echo '<a href="upload.php">Voltar</a>';
}
Electronic
Então cara, em relação aos loops eu usei porque senão da erro quando eu tento exibir(tipo quando tenta exibir array), a variável $all eu utilizo em outra página pois o space.inc e o connect.inc, como nome já diz são includes.
pra que você usa essa consulta SELECT * FROM files WHERE ownerid='$upid' ?
esta parte eu uso pra contar os arquivos de um determinado usuário(a variável $upid tá num include de cookies). Eu acho que, como já disse, estou fazendo algum cálculo de forma incorreta ou fiz cagada na hora de criar o banco de dados.
Atualização:
zipei os arquivos do site que estava no host, se acharem melhor todo o código esta no seguinte link(download direto): http://pixelfiles.esy.es/Archive.zip
Alguma sugestão do que possa estar causando o erro?
só o código e sem saber como é seu banco nao adianta muito
Fala Electronic,
agradeço por toda ajuda que você vêm me dando, como "solicitou" ai vão a estruturas das duas tabelas do BD:
Tabela Files:
/applications/core/interface/imageproxy/imageproxy.php?img=http://videonow.esy.es/files/files.png&key=0827cd1c331c74e586ee20dc6480f663e224e02a9767b8848fe832ec4bac9d69" alt="files.png" />
E a tabela de usuários:
/applications/core/interface/imageproxy/imageproxy.php?img=http://videonow.esy.es/files/files2.png&key=c1354be0d8438d895c2b8795cd9c3d90f855f5f86ee2c90781651ae821a9cc14" alt="files2.png" />
No arquivo que faz o upload dê um echo assim:
echo "$space < $real_fsize";
Veja o que aparece, pois em nenhum lugar ali você definiu o $space.