Вывести скрипт на чистую воду/php.

Код изложенный ниже, есть обычный сниппет, появилась острая необходимость вывести этот код из динамических ресурсов modx в статичный файл (прим. scr.php), подскажите реально ли взять код сниппета и подключив в нем какие либо библиотеки запускать из обычного php файла?

<?php
if(!isset($_REQUEST['action']) || empty($_REQUEST['action']))
    return;

$action = $_REQUEST['action'];
$error = 0;

switch($action) {
    case 'app': 
        if(!isset($_REQUEST['file']) || empty($_REQUEST['file']))
            return -1;
        
        $file = $_REQUEST['file'];
        
        $default_files = array(
            'm1' => 'm1.csv',
            'i2' => 'i2.csv',
            's3' => 's3.csv',
            's4' => 's4.csv'
        );
        
        if(isset($_REQUEST['filename']) && !empty($_REQUEST['filename']))
            $filename = $_REQUEST['filename'];
            
        if(isset($_REQUEST['importpath']) && !empty($_REQUEST['importpath']))
            $path = '/' . $_REQUEST['importpath'] . '/';
        else
            $path = '/import/';
        
        $log = "";
        if($file == 1)
        {   
            if(!$filename)
                $filename = $default_files['m1'];
            
            convertToUtf8(MODX_BASE_PATH, $path, $filename);

            $fields = "1,2,3,4,5,6,7,8,9";            
          
            $offset = 0;
            $drop = 1;
            while(1) {
                $cmd = 'php ' . MODX_BASE_PATH . 'import/importm1.php ' . MODX_BASE_PATH . $path . $filename . ' ' . (int)$offset . ' ' . $drop . ' ' . $fields;
                ob_start();
                $offset = system($cmd, $result);
                ob_end_clean();
                
                if($result != 0)
                    break;
        
                $drop = 0;
            }
        }
        else if($file == 2)
        {
            if(!$filename)
                $filename = $default_files['i2'];
        
            convertToUtf8(MODX_BASE_PATH, $path, $filename);
            $fields = "1,2,3,4,5,6";            
            $offset = 0;
            
            while(1) {
                $cmd = 'php ' . MODX_BASE_PATH . 'import/importi2.php ' . MODX_BASE_PATH . $path . $filename . ' ' . (int)$offset . ' ' . $fields;
                ob_start();
                $offset = system($cmd, $result);
                ob_end_clean();
                if($result != 0)
                    break;
            }
        }
        else if($file == 3)
        {
            if(!$filename)
                $filename = $default_files['s3'];
            
            convertToUtf8(MODX_BASE_PATH, $path, $filename);
            
            $fields = "1,2,3,4,5,6,7";            
            $offset = 0;
            
            while(1) {
                $cmd = 'php ' . MODX_BASE_PATH . 'import/import.php ' . MODX_BASE_PATH . $path . $filename . ' ' . (int)$offset . ' ' . $fields;
                ob_start();
                $offset = system($cmd, $result);
                ob_end_clean();
                
                if($result != 0)
                    break;
            }
        }
        else if($file == 4)
        {
            if(!$filename)
                $filename = $default_files['s4'];
                
            convertToUtf8(MODX_BASE_PATH, $path, $filename);
            $fields = "1,2,3,4";
            $cmd = 'php ' . MODX_BASE_PATH . 'import/imports4.php ' . MODX_BASE_PATH . $path . $filename . ' ' . $fields;
            ob_start();
            $offset = system($cmd, $result);
            ob_end_clean();
        }
        else {
            $log = "No transmitted file!";
        }
        
        if(isset($_REQUEST['auth']) && !empty($_REQUEST['auth']))
            return;

        $error_filename = MODX_BASE_PATH . "error_log.txt";
        $file = fopen($error_filename,"rb");
        $log = fread($file, filesize($error_filename));
        fclose($file);
        unlink($error_filename);

        if($result == 1)
            $result = 0;
        
        return json_encode(array('error' => $result, 'log' => $log));
    break;
}

function convertToUtf8($basepath, $path, $filename){
    $text = file_get_contents($basepath . $path . $filename);
    $text = iconv('WINDOWS-1251', 'UTF-8', $text);  
    file_put_contents($basepath . $path . $filename, $text);
}
unixk0d
23 мая 2017, 11:01
modx.pro
2 002
0

Комментарии: 6

Олег
23 мая 2017, 14:06
0
Да, причем очень просто — достаточно поставить галочку «статичный», или как-то так называется.
Тогда сниппет сохранится как обычный файл, причем в нем сразу будет доступен $modx
    Виталий Серый
    23 мая 2017, 22:48
    +2
    Если правильно уловил суть, то вот как работать с MODX Api.
      unixk0d
      24 мая 2017, 11:47
      0
      То есть мне в начало скрипта нужно добавить:
      // Подключаем
      define('MODX_API_MODE', true);
      require 'service/app.php';
      
      // Включаем обработку ошибок
      $modx->getService('error','error.modError');
      $modx->setLogLevel(modX::LOG_LEVEL_INFO);
      $modx->setLogTarget(XPDO_CLI_MODE ? 'ECHO' : 'HTML');
      После добавления в скрипт строк указанных выше, сервер стал отдавать: Error downloading www.XXX.XX/test/app.php?action=app&auth=1&file=5 — server replied: Internal Server Error, причем до ввода этих строк скрипт отрубало таймаутом сервера.
        Пётр Молчанов
        24 мая 2017, 12:25
        0
        require 'service/app.php';
        проверьте, чтобы путь был указан правильно. он должен указывать на index.php модыкса, который в корне папки обычно
      unixk0d
      24 мая 2017, 15:17
      0
      К примеру содержимое скрипта test.php (код скрипта полностью):
      <?php
      // Подключаем
      define('MODX_API_MODE', true);
      require 'index.php';
      
      // Включаем обработку ошибок
      $modx->getService('error','error.modError');
      $modx->setLogLevel(modX::LOG_LEVEL_INFO);
      $modx->setLogTarget(XPDO_CLI_MODE ? 'ECHO' : 'HTML');
      
      
      
      $iducmo = $modx->user->get('id'); // для залогинившегося пользователя получаем его id
      echo $iducmo;
      отдаёт пустую страницу (при вошедшем в систему пользователе, вызывая-же его как сниппет из шаблона, получаем ID )
        Пётр Молчанов
        24 мая 2017, 17:02
        0
        test.php где находится? в корне или, может, быть в папке assets?
        Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
        6