Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Estou precisando salvar fotos dos usuários de um sistema e não estou conseguindo fazer com OO já assisti video aulas e li algumas matérias mas sempre dá erro. Alguém sabe algum jeito de se fazer?? Eu até tentei mas fica sempre com erro, vou postar aqui talvez tenha algo que eu esteja fazendo errado.
class para salvar a foto:
private function salvarFoto($foto){
$fotos = $_FILES['foto_admin'];
$fotoDir = "imagens/fotos_admins/";
$fotoPath = $fotoDir . basename($foto['foto_admin']['name']);
$fotoTmp = $foto['foto_admin']['tmp_name'];
if(move_uploaded_file($fotoTmp, $fotoPath)):
return $fotoPath;
else:
return false;
endif;
}
E estou chamando ela assim:
$upload = $this->salvarFoto($_FILES);
if(gettype($upload) == 'string'):
$dados['foto_admin'] = $upload;
endif;
E o erro é o seguinte: **move_uploaded_file(imagens/fotos_admins/sapinn.jpg): failed to open stream: No such file or directory in**
Não sei o que está errado a pasta imagens/fotos_admins está dentro da minha pasta ControllerObrigado Omar me salvou de novo, no meu caso só tava faltando o __DIR__ mesmo. Mas agora estou com outro problema não estou conseguindo chamar a imagem
Ressaltando que a constante __DIR__ não serve para renderização, e eu acho que possa ser esse caso de achar a imagem.
Exemplo:
<img src="<?= __DIR__ . '/diretorio/imagem.jpg' ?>" alt="Ops! a constante não serve para esse caso" />
Tente localizar a imagem a partir da raiz onde se encontra o index.
E claro verifique se realmente a imagem foi salva.Eu tentei e não consegui. Você acha que é uma má pratica eu salvar as imagens na minha pasta public e depois chama-las ??
Má prática não é. O problema é organização mesmo.
Digamos a seguinte estrutura de arquivo na raiz.
index.php
imagens/arquivos/
forms/enviar.php
foo/mostrar.php
Aí nesse caso enviar.php é o arquivo que vai salvar um upload dentro de imagens/arquivos/ logo para um script serve-side eu uso __DIR__ . '/../../imagens/arquivos/' então facilmente localizo o diretório para salvar o arquivo digamos exemplo.jpg.
Mas então quero ver a imagem em mostrar.php nesse caso uso o esquema html.
**<img src="../../imagens/arquivos/exemplo.jpg" alt="a imagem não foi carregada" />**
Porém digamos que eu esteja usando um modo de reescrita do apache onde tudo volta ao index aí a coisa muda
**<img src="imagens/arquivos/exemplo.jpg" alt="a imagem não foi carregada" />**
O negócio é você ir testando ai até encontrar a forma de endereçar a imagem corretamente.
#EDIT:
>
Citar
Há um problema em salvar arquivos de usuários em algum diretório que contenha algum arquivo sensível da aplicação, digamos na raiz onde está o index. Se não fazer um refinamento detalhado no arquivo que vai armazenar, esse usuário pode usar o upload para corromper, editar ou substituir arquivos no mesmo endereço através do próprio arquivo que ele envia.
Entendi... Eu estou fazendo esse sistema em MVC usando .htacess para as URL com isso eu não consigo acessar os arquivos dentro da pasta app no caso na imagem, todavia, eu consigo colocar ele na pasta public dentro de uma pasta chamada img_user. Para chamar a imagem eu uso uma contante com uma url pré definida, assim:
CONST.'/img_user/'.$user->foto
E está funcionando, tentei outras formas mas não consegui fazer.
Mas a classe também está nessa pasta Controller?
Acredito que não...
Tente usar a constante __DIR__ para obter o diretório atual e a partir dele indicar o local do outro diretório.
Exemplo:
$diretorio = __DIR__ . '/../imagens/fotos_admins/';
Nesse caso do diretório onde executamos escape um diretório atrás e entre em imagens.....
Lógico que o(s) escape(s) depende da arquitetura dos diretórios do seu projeto.
Esse é um truque muito eficiente que evita qualquer erro de localização de diretórios ou arquivos.
Veja essa classe:
https://github.com/Spell-Master/source-map/blob/master/system/class/model/ImageUpload.php
if ($imagem->getResult()) {
} else {