Вывести скрипт на чистую воду/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);
}
Комментарии: 6
Да, причем очень просто — достаточно поставить галочку «статичный», или как-то так называется.
Тогда сниппет сохранится как обычный файл, причем в нем сразу будет доступен $modx
Тогда сниппет сохранится как обычный файл, причем в нем сразу будет доступен $modx
Если правильно уловил суть, то вот как работать с MODX Api.
То есть мне в начало скрипта нужно добавить:
// Подключаем
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, причем до ввода этих строк скрипт отрубало таймаутом сервера. require 'service/app.php';
проверьте, чтобы путь был указан правильно. он должен указывать на index.php модыкса, который в корне папки обычно
К примеру содержимое скрипта 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 )
test.php где находится? в корне или, может, быть в папке assets?
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.