Your IP : 216.73.216.224


Current Path : /var/www/html/libraries/noboss/src/Form/Field/Nbbinaryfile/
Upload File :
Current File : /var/www/html/libraries/noboss/src/Form/Field/Nbbinaryfile/NbreadcontentHelper.php

<?php
/**
 * @package			No Boss Extensions
 * @subpackage  	No Boss Library
 * @author			No Boss Technology <contact@nobosstechnology.com>
 * @copyright		Copyright (C) 2026 No Boss Technology. All rights reserved.
 * @license			GNU Lesser General Public License version 3 or later; see <https://www.gnu.org/licenses/lgpl-3.0.en.html>
 */

namespace Noboss\Library\Form\Field\Nbbinaryfile;

use Joomla\CMS\Uri\Uri;

\defined('_JEXEC') or die;

/**
 * Classe que auxília na leitura de conteúdo de arquivos.
 */
class NbreadcontentHelper {
	/**
	 * Função que lê o conteúdo de um arquivo carregado através de um campo upload(input type="file").
	 * @param Array $fileUploaded Deve ser um array como os mesmos dados de um arquivo capturado através
	 * da variável FILES do PHP.
	 * @return string Retorna o conteúdo do arquivo em string ou false caso algum erro ocorra.
	 */
	public static function readUploadFileAsString(Array $fileUploaded) {

		// Flag que armazena se a função get_files_contes está ativa no ambiente de execução.
		$isActiveFileGetContents = function_exists('file_get_contents');

		// Pega extensão do arquivo.
		$fileExtension = strrchr($fileUploaded["name"], ".");

		// Pega mime type do arquivo de upload.
		$fileMimeType = $fileUploaded["type"];

		// Variável que armazenará o conteúdo string do arquivo.
		$fileString = false;

	 	// Verifica se a função file_get_contents está ativa.
	 	if($isActiveFileGetContents){
	 		// Pega conteúdo da imagem em string.
	 		$fileString = file_get_contents($fileUploaded["tmp_name"]);
	 	}else{
	 		// file_get_contents não está ativo.

	 		// Hirerquia de pastas para caminho de arquivos temporários.
	 		$folders = 'images/noboss_files/readcontent';

	 		// Configura caminho de diretório para arquivos temporários.
	 		$temporaryDirectory = JPATH_ROOT . DIRECTORY_SEPARATOR . $folders;

	 		// Verfica se não existe o diretório para os salvar os arquivos temporários.
			if(!file_exists($temporaryDirectory)){
				// Cria o diretório com permissão 775 e no modo recursivo(criando subdiretórios se necessário).
				mkdir($temporaryDirectory, 0775, true);
			}else{
				// Se já existe o diretório altera permissão para garantir que os arquivos serão salvos.
				chmod($temporaryDirectory, 0775);
			}

			// Caminho completo onde o arquivo será gerado.
			$dest = $temporaryDirectory . DIRECTORY_SEPARATOR . $fileUploaded["name"];

			/* Tenta mover o arquivo para uma área acessível via requisição HTTP e captura resultado. */
			$isSuccessFileMove = move_uploaded_file($fileUploaded["tmp_name"], $dest);

			// Verifica se o arquivo foi movido com sucesso.
			if($isSuccessFileMove != false){
				// Monta URL temporária de acesso ao arquivo.
				$urlFileTemp =  URI::root() . $folders . DIRECTORY_SEPARATOR . $fileUploaded["name"];

				// Pega o conteúdo do arquivo em string.
				$fileString = self::cURLReadyFile($urlFileTemp);

				// Remove arquivo do diretório temporário.
				unlink($dest);
			} else {
				// Arquivo não pode ser movido.
				return false;
			}

		}

		// Retorna caminho string do arquivo.
		return $fileString;
	}

	/**
	 * Função que lê arquivo como string a partir de uma URL.
	 * @param string $fileUrl URL onde encontra-se o arquivo.
	 * @return string Devolve o conteúdo da arquivo em uma string.
	 */
	public static function cURLReadyFile($fileUrl)
	{
		// Inicia curl.
		$cUrl = curl_init();
		curl_setopt($cUrl, CURLOPT_URL, $fileUrl);
		// CONNECTTIMEOUT 0: aguarda indefinidamente — intencional para arquivos de tamanho variavel
		curl_setopt($cUrl, CURLOPT_CONNECTTIMEOUT, 0);
		curl_setopt($cUrl, CURLOPT_RETURNTRANSFER, 1);
		curl_setopt($cUrl, CURLOPT_SSL_VERIFYPEER, false);
		curl_setopt($cUrl, CURLOPT_SSL_VERIFYHOST, false);
		curl_setopt($cUrl, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4);
		curl_setopt($cUrl, CURLOPT_USERAGENT, 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36');
		if (defined('CURLPROTO_HTTP') && defined('CURLPROTO_HTTPS')) {
			curl_setopt($cUrl, CURLOPT_PROTOCOLS,       CURLPROTO_HTTP | CURLPROTO_HTTPS);
			curl_setopt($cUrl, CURLOPT_REDIR_PROTOCOLS, CURLPROTO_HTTP | CURLPROTO_HTTPS);
		}
		$stringImage = curl_exec($cUrl);
		curl_close($cUrl);
		return $stringImage;
	}

}