| Server IP : 103.161.17.216 / Your IP : 216.73.216.1 Web Server : nginx/1.18.0 System : Linux tipsysaigoncharming 5.4.0-216-generic #236-Ubuntu SMP Fri Apr 11 19:53:21 UTC 2025 x86_64 User : www-data ( 33) PHP Version : 7.4.3-4ubuntu2.29 Disable Function : pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare, MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : OFF | Sudo : ON | Pkexec : ON Directory : /var/www/app.houseland.info/application/libraries/ |
Upload File : |
<?php
defined('BASEPATH') or exit('No direct script access allowed');
use app\services\zip\Unzip;
class App_module_installer
{
private $ci;
public function __construct()
{
$this->ci = &get_instance();
}
/**
* Upload module
* @return array
*/
public function from_upload()
{
if (isset($_FILES['module']) && _perfex_upload_error($_FILES['module']['error'])) {
return [
'error' => _perfex_upload_error($_FILES['file']['error']),
'success' => false,
];
}
if (isset($_FILES['module']['name'])) {
hooks()->do_action('pre_upload_module', $_FILES['module']);
$response = ['success' => false, 'error' => ''];
// Get the temp file path
$uploadedTmpZipPath = $_FILES['module']['tmp_name'];
$unzip = new Unzip();
$moduleTemporaryDir = get_temp_dir() . time() . '/';
try {
$unzip->extract($uploadedTmpZipPath, $moduleTemporaryDir);
if ($this->check_module($moduleTemporaryDir) === false) {
$response['error'] = 'No valid module is found.';
} else {
$unzip->extract($uploadedTmpZipPath, APP_MODULES_PATH);
hooks()->do_action('module_installed', $_FILES['module']);
$response['success'] = true;
}
$this->clean_up_dir($moduleTemporaryDir);
} catch (Exception $e) {
$response['error'] = $e->getMessage();
}
return $response;
}
}
public function check_module($source)
{
// Check the folder contains at least 1 valid module.
$modules_found = false;
$files = get_dir_contents($source);
if ($files) {
foreach ($files as $file) {
if (endsWith($file, '.php')) {
$info = $this->ci->app_modules->get_headers($file);
if (isset($info['module_name']) && !empty($info['module_name'])) {
$modules_found = true;
break;
}
}
}
}
if (!$modules_found) {
return false;
}
return $source;
}
private function clean_up_dir($source)
{
delete_files($source);
delete_dir($source);
}
}