Проблема с установкой дополнений после обновления ICMS 2.1.2

#61 17 мая 2015 в 08:30


Wanderer, а у меня на двух серверах $list такой какой я указал выше… и ?

Скорпион
И значит, что нужно учитывать и такой вариант.
С FTP сервера получить список файлов можно 2-мя функциями:
ftp_nlist и ftp_rawlist. Ни та, ни другая не стандартизированы.

Варианта решения 2:
а) либо сохранить проверку наличия развернутой InstantCMS и городить костыли
б) либо от проверки отказаться и лить как есть.
#62 17 мая 2015 в 08:31


а вот вывод скрипта из #46 на том же серваке (стенде):

  1.  
  2. Сервер найден
  3. Подключение выполнено успешно
  4. (
  5. [0] => /.htaccess
  6. [1] => /bootstrap.php
  7. [2] => /cache
  8. [3] => /credits.txt
  9. [4] => /cron.php
  10. [5] => /index.php
  11. [6] => /license.en.txt
  12. [7] => /license.ru.txt
  13. [8] => /readme.txt
  14. [9] => /system
  15. [10] => /templates
  16. [11] => /test.php
  17. [12] => /testing.html
  18. [13] => /upload
  19. [14] => /wysiwyg
  20. )
  21.  

Скорпион
попробуйте в файл из #46 установить $path='/system/core'
#63 17 мая 2015 в 08:33
Есть еще вариант в голове.
очищать слеши совсем функцией $str = str_replace("\/","", $str);
#64 17 мая 2015 в 08:35

попробуйте в файл из #46 установить $path='/system/core'

Wanderer
  1.  
  2. Сервер найден
  3. Подключение выполнено успешно
  4. (
  5. [0] => /system/core/action.php
  6. [1] => /system/core/backend.php
  7. [2] => /system/core/cache.php
  8. [3] => /system/core/cachefiles.php
  9. [4] => /system/core/cachememory.php
  10. [5] => /system/core/config.php
  11. [6] => /system/core/controller.php
  12. [7] => /system/core/core.php
  13. [8] => /system/core/database.php
  14. [9] => /system/core/debug.php
  15. [10] => /system/core/debugconfig.php
  16. [11] => /system/core/eventsmanager.php
  17. [12] => /system/core/form.php
  18. [13] => /system/core/formfield.php
  19. [14] => /system/core/frontend.php
  20. [15] => /system/core/installer.php
  21. [16] => /system/core/mailer.php
  22. [17] => /system/core/model.php
  23. [18] => /system/core/nestedsets.php
  24. [19] => /system/core/permissions.php
  25. [20] => /system/core/request.php
  26. [21] => /system/core/template.php
  27. [22] => /system/core/template.php.original
  28. [23] => /system/core/updater.php
  29. [24] => /system/core/uploader.php
  30. [25] => /system/core/user.php
  31. [26] => /system/core/widget.php
  32. )
  33.  
#65 17 мая 2015 в 08:35
На 4-ом сервере (файлохранилище, не хостинг, ОС Windows Server 2012, встроенный FTP сервер)
$path = '/СУ02'; //путь к папке сервера

  1. (
  2. [0] => /СУ02/су_20130228.zip
  3. [1] => /СУ02/СУ.rar
  4. )
Включу этот сервер в тестирование универсального решения.
#66 17 мая 2015 в 08:35


попробуйте в файл из #46 установить $path='/system/core'

Wanderer
  1.  
  2. Сервер найден
  3. Подключение выполнено успешно
  4. (
  5. [0] => /system/core/action.php
  6. [1] => /system/core/backend.php
  7. ...
  8. )
  9.  

Скорпион

Спасибо.
Дополненное решение будет вечером.
#67 17 мая 2015 в 08:37


Есть еще вариант в голове.
очищать слеши совсем функцией $str = str_replace("\/","", $str);

Скорпион
Можно. Но лучше задействовать basename.
#68 17 мая 2015 в 08:40
и всетаки, раз имеем три варианта наличия слеша (без, один слеш, два слеша) может просто перед проверкой "чистить" слеши и потом проверять?
#69 17 мая 2015 в 08:43

Но лучше задействовать basename.

Wanderer
Посмотрел что за функция… действительно, лучше тогда её.
#70 17 мая 2015 в 08:43


и всетаки, раз имеем три варианта наличия слеша (без, один слеш, два слеша) может просто перед проверкой "чистить" слеши и потом проверять?

Скорпион
вариант с двумя слэшами — это "производное" от полного пути в имени файла.
#71 17 мая 2015 в 09:05
Ну тогда используя basename можно так:
  1.  
  2. private function checkDestination($connection, $account) {
  3.  
  4. $ftp_path = 'ftp://' . $account['host'] . $account['path'];
  5. $check_dirs = array(array('system/core', 'core.php'), array('templates', '.htaccess'));
  6.  
  7. foreach ($check_dirs as $dir) {
  8.  
  9. $contents = ftp_nlist($connection, $account['path'] . $dir[0]);
  10.  
  11. foreach ($contents as $list) {
  12. $list_data[] = basename($list);
  13. }
  14.  
  15. if ($list_data === false) {
  16. cmsUser::addSessionMessage(sprintf(LANG_CP_FTP_NO_ROOT, $ftp_path . $dir[0]), 'error');
  17. return false;
  18. }
  19.  
  20. if (!in_array($dir[1], $list_data)) {
  21. cmsUser::addSessionMessage(sprintf(LANG_CP_FTP_BAD_ROOT, $ftp_path . $dir[0]), 'error');
  22. return false;
  23. }
  24.  
  25. }
  26. return true;
  27.  
  28. }
  29.  
#72 17 мая 2015 в 10:24


Ну тогда используя basename можно так:

Скорпион
Да, и это правильное решение v
Только форматирование добавьте
#73 17 мая 2015 в 12:32

Только форматирование добавьте

Wanderer
вроде подравнял.
#74 17 мая 2015 в 12:49
Версия патча для моего компонента.
#75 17 мая 2015 в 15:57


Версия патча для моего компонента.

Скорпион

ссылка кривая
Вы не можете отвечать в этой теме.
Войдите или зарегистрируйтесь, чтобы писать на форуме.
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.