Creating directory with mkdir php

0

I wrote a function in php to upload files, running localhost it works normal creating the correct directory, but on the server it creates it wrong, if I pass the path: home\banners , it creates a folder with the bootstrap .. \ assets name and does not save the file, it is as if the function was not making use of the third parameter of mkdir(path, mode, recursive = true) , follows the function:

// arquivo config.php
define('DP', DIRECTORY_SEPARATOR);
define('UPLOAD_DIRECTORY', __DIR__ . '\..\assets' . DP);

// arquivo controllers.php
public function saveUploadFile(string $uploaddirectory = '', UploadedFile $file)
{
    // PEGA EXTENÇÃO DO ARQUIVO
    $_['ext'] = pathinfo($file->getClientFilename(), PATHINFO_EXTENSION);
    // RENOMEIA PARA NUMERO EXADECIMAL ALEATORIO
    $_['rename'] = bin2hex(random_bytes(16));
    // JUNTA NOME DO ARQUIVO + EXTENSÇÃO
    $image = sprintf('%s.%0.8s', $_['rename'], $_['ext']);
    // CRIA PATH QUE SERA SALVA A IMAGEM        
    $_['path'] = UPLOAD_DIRECTORY . $uploaddirectory;       
    // SE NÃO EXISTE DIRETORIO CRIAR
    if( !is_dir( $_[ 'path' ] ) ) {
        if( !mkdir( $_['path'], 0777, true ) ){
            exit('falha ao criar arquivo no diretorio '. $_['path']);
        }
    }
    // MOVE ARQUIVO PARA O PATH
    $file->moveTo($_['path'] . DP . $image);
    // DEVOLVE CAMINHO ONDE IMAGEM FOI SALVA
    return $_['path'] . DP . $image;
}

Folder structure:

root
  ├── app
  │    └── Controllers
  │            └── Controllers.php
  ├── bootstrap
  │     └── Config.php
  └── assets
       └── // imagens devem ficar aqui
    
asked by anonymous 22.08.2018 / 22:15

1 answer

2

Switch:

\..\assets

By:

/../assets

Aliais does not even need to use:

define('DP', DIRECTORY_SEPARATOR);

Both Windows and Linux accept / , so do everything like this:

// arquivo config.php
define('UPLOAD_DIRECTORY', __DIR__ . '/../assets/');

// arquivo controllers.php
public function saveUploadFile(string $uploaddirectory = '', UploadedFile $file)
{
    // PEGA EXTENÇÃO DO ARQUIVO
    $_['ext'] = pathinfo($file->getClientFilename(), PATHINFO_EXTENSION);
    // RENOMEIA PARA NUMERO EXADECIMAL ALEATORIO
    $_['rename'] = bin2hex(random_bytes(16));
    // JUNTA NOME DO ARQUIVO + EXTENSÇÃO
    $image = sprintf('%s.%0.8s', $_['rename'], $_['ext']);
    // CRIA PATH QUE SERA SALVA A IMAGEM        
    $_['path'] = UPLOAD_DIRECTORY . $uploaddirectory;       
    // SE NÃO EXISTE DIRETORIO CRIAR
    if( !is_dir( $_[ 'path' ] ) ) {
        if( !mkdir( $_['path'], 0777, true ) ){
            exit('falha ao criar arquivo no diretorio '. $_['path']);
        }
    }
    // MOVE ARQUIVO PARA O PATH
    $file->moveTo($_['path'] . '/' . $image);
    // DEVOLVE CAMINHO ONDE IMAGEM FOI SALVA
    return $_['path'] . '/' . $image;
}

Extras

Now on the use of $_['ext'] , $_['path'] , etc, I really do not know why to do this, the variables are already isolated in the scope of saveUploadFile , you do not have to create an array, it should start something like this:

public function saveUploadFile(string $uploaddirectory = '', UploadedFile $file)
{
    // PEGA EXTENÇÃO DO ARQUIVO
    $_ = array();

Because if you do not have it you will probably fill the PHP log with several warnings without need, but it would be more practical to create the vars directly, since this is in the scope of the method, there is no need of arrays.

Another reason that is meaningless are the parameters:

saveUploadFile(string $uploaddirectory = '', UploadedFile $file)

saveUploadFile(string $uploaddirectory, UploadedFile $file)

The end result would be this:

// arquivo config.php
define('UPLOAD_DIRECTORY', __DIR__ . '/../assets/');

// arquivo controllers.php
public function saveUploadFile(string $uploaddirectory, UploadedFile $file)
{
    // PEGA EXTENÇÃO DO ARQUIVO
    $ext = pathinfo($file->getClientFilename(), PATHINFO_EXTENSION);

    // RENOMEIA PARA NUMERO EXADECIMAL ALEATORIO
    $rename = bin2hex(random_bytes(16));

    // JUNTA NOME DO ARQUIVO + EXTENSÇÃO
    $image = sprintf('%s.%0.8s', $rename, $ext);

    // CRIA PATH QUE SERA SALVA A IMAGEM        
    $path = UPLOAD_DIRECTORY . $uploaddirectory;

    // SE NÃO EXISTE DIRETORIO CRIAR
    if( !is_dir( $path ) ) {
        if( !mkdir( $path, 0777, true ) ){
            exit('falha ao criar arquivo no diretorio '. $path);
        }
    }

    // MOVE ARQUIVO PARA O PATH
    $file->moveTo($path . '/' . $image);

    // DEVOLVE CAMINHO ONDE IMAGEM FOI SALVA
    return $path . '/' . $image;
}
    
22.08.2018 / 22:17