Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

xaboto

[Resolvido] Criar pasta dentro do servidor (mkdir()) nao funciona

Mensagens Recomendadas

xaboto

Boas, primeiro que tudo sou um principiante em programação pelo que peço desculpa se utilizar algum termo incorretamente.

O meu ficheiro php é chamado a partir do action de um form onde o utilizador introduz o nome da categoria que quer criar. Este ficheiro permite duas coisas: a criação de uma pasta com o nome da categoria e a introdução na base de dados se a pasta for criada com sucesso no servidor. Neste momento encontro-me neste primeiro ponto e com um problema.

O ficheiro php:

<?php
$NomeCategoria= $POST['NomeCategoria'];
include 'ligarbd.php';


if(chdir('img/produtos')){

mkdir($NomeCategoria, 0777);


}
else {
echo'Não foi possível a mudança para o diretório pedido';

}

?>

Ele está a ser corretamente chamado do form e entra bem na pasta img/produtos (pus la um echo pa confirmar) e ate pus um diretorio errado pa ver se ia para o else. O problema agora é que ele não está a criar a pasta. Não sei o que estou a fazer de errado (algo terá de ser). Até ja estou a manda -lo para dentro da pasta produtos para não haver problemas na criação de pastas dentro de umas ja existentes porque pelo que pesquisei isso da alguns problemas e depois também tem de se ter atenção com o mod ou seja tem de se mudar (chmod()) qualquer coisa do genero. E é por isso que aqui estou se alguem me poder ajudar agradecia imenso :thumbsup:

Editado por xaboto

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
chbcl

Estás a usar Ubuntu?

O diretório onde queres fazer o mkdir tem permissão de criação e escrita?


developer @ filipealves.net

filipealvesbcl [a] gmail.com

github.com/filipealvesbcl

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
xaboto

Estás a usar Ubuntu?

O diretório onde queres fazer o mkdir tem permissão de criação e escrita?

O site está alojado num servidor gratuito (byethost) e acedo a ele para por lá ficheiros atraves do FileZilla e não sei que OS usa, mas vou tentar saber. Quanto às permissoes também não sei mas pelo que percebi o parametro 0777 que se mete na função mkdir dá todas as permiçoes (vi aqui).

Mas já fiz alguns progressos. Adicionei o parametro true (que no site da w3schools diz que é opcional) e em vez da variavel escrevi: "nomedapasta" e deu a pasta foi criada mas nao sei porque demorou uns longos minutos. Será de eu usar o FileZilla?

EDIT: Usa Linux

Editado por xaboto

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
xaboto

Consegues meter aqui um print? Penso que já sei qual o teu problema.

Pode ser também da band do host.

desculpa a ignorancia, mas um print do que?

EDIT: Será isto?

AXKtzcr.png

Editado por xaboto

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
chbcl

Já sei qual é o problema, está mesmo onde pensava.

quando fazes isto:

mkdir($NomeCategoria, 0777);

estás a dizer para criar um diretório com o nome que estiver na variável e que esse diretório vai ter a permissão 0777

mas se o diretório onde esse diretório vai ser criado não tem a permissão ele não deixa o PHP executar esse comando...

Estás a ligar-te ao servidor por FTP? clica com o lado direito do rato no diretório onde queres criar as pastas e procura por permissões e mete 777 e já vai dar :)

PS: Quando queres saber as informações do servidor basta escreveres num ficheiro php:

<?php

phpinfo();

?>


developer @ filipealves.net

filipealvesbcl [a] gmail.com

github.com/filipealvesbcl

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
xaboto

Já sei qual é o problema, está mesmo onde pensava.

quando fazes isto:

mkdir($NomeCategoria, 0777);

estás a dizer para criar um diretório com o nome que estiver na variável e que esse diretório vai ter a permissão 0777

mas se o diretório onde esse diretório vai ser criado não tem a permissão ele não deixa o PHP executar esse comando...

Estás a ligar-te ao servidor por FTP? clica com o lado direito do rato no diretório onde queres criar as pastas e procura por permissões e mete 777 e já vai dar :)

PS: Quando queres saber as informações do servidor basta escreveres num ficheiro php:

<?php

phpinfo();

?>

Fui ao fileZilla e mudei entao as permissoes das pastas para 0777, mas continua a não dar :S

Vou voltar a rever tudo, o erro provavelmente é algo mais basico.

Um à parte:

Eu tenho outro form que serve para fazer upload de imagens que neste momento mete-as no mesmo sitio onde estou a tentar criar as pastas e o que é estranho é que sem a permissao de escrita consegui mandar para la imagens

aqui esta esse ficheiro de upload de imagem:

$target_dir = "img/produtos/";
$target_file = $target_dir . basename($_FILES["uploadFile"]["name"]);
$uploadOk = 1;
$imageFileType = pathinfo($target_file,PATHINFO_EXTENSION);
// Check if image file is a actual image or fake image
if(isset($_POST["submit"])) {
$check = getimagesize($_FILES["uploadFile"]["tmp_name"]);
if($check !== false) {
echo "File is an image - " . $check["mime"] . ".";
$uploadOk = 1;
} else {
echo "File is not an image.";
$uploadOk = 0;
}
}
// Check if file already exists
if (file_exists($target_file)) {
echo "Sorry, file already exists.";
$uploadOk = 0;
}
// Check file size
if ($_FILES["uploadFile"]["size"] > 1000000) {
echo "Sorry, your file is too large.";
$uploadOk = 0;
}
// Allow certain file formats
if($imageFileType != "jpg" && $imageFileType != "png" && $imageFileType != "jpeg"
&& $imageFileType != "gif" ) {
echo "Sorry, only JPG, JPEG, PNG & GIF files are allowed.";
$uploadOk = 0;
}
// Check if $uploadOk is set to 0 by an error
if ($uploadOk == 0) {
echo "Sorry, your file was not uploaded.";
// if everything is ok, try to upload file
} else {
if (move_uploaded_file($_FILES["uploadFile"]["tmp_name"], $target_file)) {
echo "The file ". basename( $_FILES["uploadFile"]["name"]). " has been uploaded.";
echo'
';

$directories = glob($somePath="img/produtos" . '/*' , GLOB_ONLYDIR);
print_r ($directories);
} else {
echo "Sorry, there was an error uploading your file.";
}
}
?>

Editado por xaboto

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
chbcl

experiementa mkdir("dietorio-teste",0777);

se nao der experimenta mkdir("diretorio-teste",777);


developer @ filipealves.net

filipealvesbcl [a] gmail.com

github.com/filipealvesbcl

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
chbcl

no ficheiro que fazes o mkdir()

escreve:

error_reporting(E_ALL);
ini_set('display_errors', 1);


developer @ filipealves.net

filipealvesbcl [a] gmail.com

github.com/filipealvesbcl

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
MROverclock

Atenção: O utilizador com que se acede ao FTP não é o mesmo que é usado pelo PHP, por isso é que se deres permissões pelo FTP, pode não afetar o PHP!

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
chbcl

Atenção: O utilizador com que se acede ao FTP não é o mesmo que é usado pelo PHP, por isso é que se deres permissões pelo FTP, pode não afetar o PHP!

será?


developer @ filipealves.net

filipealvesbcl [a] gmail.com

github.com/filipealvesbcl

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
HappyHippyHippo

Atenção: O utilizador com que se acede ao FTP não é o mesmo que é usado pelo PHP, por isso é que se deres permissões pelo FTP, pode não afetar o PHP!

essa afirmação denota que não conpreende o sistema de permissões de uma sistema unix ...

examinando o valor 777

- primeiro de tudo, o valor 7 representa uma mascara de bits para : leitura, escrita e execução do ficheiro (111 em binário = 7 decimal)

- o primeiro valor representa estes níveis de acesso para o utilizador dono do ficheiro

- o segundo valor representa estes níveis de acesso para utilizadores associados ao grupo atribuido ao ficheiro

- o terceiro valor representa estes níveis de acesso a nível global.

por outras palavras, seja o utilizador FTP ou o utilizador BATATAS, so o modo de permissões é 777 toda a gente tem permissões de escrita, leitura e execução do ficheiro


IRC : sim, é algo que ainda existe >> #p@p

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
chbcl

essa afirmação denota que não conpreende o sistema de permissões de uma sistema unix ...

examinando o valor 777

- primeiro de tudo, o valor 7 representa uma mascara de bits para : leitura, escrita e execução do ficheiro (111 em binário = 7 decimal)

- o primeiro valor representa estes níveis de acesso para o utilizador dono do ficheiro

- o segundo valor representa estes níveis de acesso para utilizadores associados ao grupo atribuido ao ficheiro

- o terceiro valor representa estes níveis de acesso a nível global.

por outras palavras, seja o utilizador FTP ou o utilizador BATATAS, so o modo de permissões é 777 toda a gente tem permissões de escrita, leitura e execução do ficheiro

É essa a teoria que eu defendo, por isso e visto todas as respostas do autor do tópico, das duas 1:

Ou alterou as permissões da pasta errada

Ou a variável que está a enviar o nome do diretório a ser criado não está a funcionar corretamente


developer @ filipealves.net

filipealvesbcl [a] gmail.com

github.com/filipealvesbcl

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
xaboto

Boas, tenho o ficheiro assim neste momento e está a funcionar, mas por vezes demora imenso tempo a criar a pasta.

$NomeCategoria= $POST['NomeCategoria'];
include 'ligarbd.php';


if(chdir('img/produtos')){

mkdir("diretorioteste", 0777);

header ('Location:index.php');


}
else {
echo'Não foi possível a mudança para o diretório pedido';

}

error_reporting(E_ALL);
ini_set('display_errors', 1);
?>

Agora se substituir o "diretorioteste" pela variavel $NomeCategoria nao funciona, alguma sugestão?

Editado por xaboto

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
chbcl

Penso que seja de $POST['NomeCategoria'];

tenta trocar por $_POST['NomeCategoria'];

Ok, agora até eu fiquei com uma dúvida, se me sinto envergonhado por não ter reparado nisso ou se simplesmente não o vi porque ninguém erra isso


developer @ filipealves.net

filipealvesbcl [a] gmail.com

github.com/filipealvesbcl

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
HappyHippyHippo

Ok, agora até eu fiquei com uma dúvida, se me sinto envergonhado por não ter reparado nisso ou se simplesmente não o vi porque ninguém erra isso

eu nunca abro secções "spoilers" ... se é para apresentar código, existe elementos para os apresentar ...


IRC : sim, é algo que ainda existe >> #p@p

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
xaboto

Penso que seja de $POST['NomeCategoria'];

tenta trocar por $_POST['NomeCategoria'];

É mesmo isso já está a funcionar muito obrigado :thumbsup:

Ok, agora até eu fiquei com uma dúvida, se me sinto envergonhado por não ter reparado nisso ou se simplesmente não o vi porque ninguém erra isso

Eu avisei logo de inicio que poderia utilizar algum termo incorretamente, mas nao te sintas culpado o amador aqui sou eu :confused:

eu nunca abro secções "spoilers" ... se é para apresentar código, existe elementos para os apresentar ...

Eu também uso os spoilers por uma questão de apresentação acho que o topico fica um pouco mais arrumado, mas vou comçar a usa-los so para o seu devido objetivo.

E mais uma vez quero-vos agradecer pelo tempo que vos fiz perder, mas teve de ser porque eu sozinho não ia lá de certeza absoluta :D

Partilhar esta mensagem


Ligação 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

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.