Jump to content

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


xaboto
 Share

Recommended Posts

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 👍

Edited by xaboto
Link to comment
Share on other sites

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

Edited by xaboto
Link to comment
Share on other sites

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

Link to comment
Share on other sites

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.";
}
}
?>
Edited by xaboto
Link to comment
Share on other sites

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
Link to comment
Share on other sites

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

Link to comment
Share on other sites

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?

Edited by xaboto
Link to comment
Share on other sites

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
Link to comment
Share on other sites

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

tenta trocar por $_POST['NomeCategoria'];

É mesmo isso já está a funcionar muito obrigado 👍

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 😕

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 😄

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.