да, если рассматривать строку как массив символов, то утверждение верное. Но есть удобнее функция ltrim
О! Сил хватило добраться до справочника.:
$str = str_replace("/","", $str);
Используя эту функцию — можно избавиться от слешов в массиве
вообщем надо думать.....
Wanderer
по поводу директорий я уже придумал. Со слешами тоже, но пока изящность решения мне не очень нравится :)
Wanderer, ну мне кажется первым делом надо избавиться от слешов, двоих — троих — десятерых.....
выпевши счас (праздник) — поэтому не думается, точнее не вспоминается как в массиве избавиться от слешов совсем.
это первое… для решения слешов....
ну а по поводу директорий — надо думать......
Шоу продолжается.
Применил свой патч на тестовом стенде — получил ошибку.
И это тоже верно.
Вот код, который выполняет проверку:
$check_dirs = array('system', 'templates'); //объявляем массив для поиска.
foreach($check_dirs as $dir){ // обходим наш объявленный выше массив в цикле. Переменная $dir в первой итерации будет равна 'system', и 'templates' во второй
if (!in_array($account['path']. $dir, $list)){ //и вот тут самое интересное. Чаще всего $account['path'] равен '/'.
// Тогда код $account['path']. $dir сформирует в первой итерации строку '/system' (и '/templates' во второй) и начнет её искать в массиве $list.
// При разработке этого кода подразумевалось, что FTP сервер возвращает массив с одним слэшем в начале каждой строки. Тогда код должен отрабатывать верно.
// но тут сказалось отсутствие стандарта на эту функцию. В итоге имеем, что имеем.
Да — итог то забыл написать — без применения моего патча — ВСЕ ОК!
да, все верно. Обратите внимание на количество слэшей в начале каждой строки. Именно на такой вариант и рассчитано решение из поставки.
Почему Ваш патч сработал у Вас и кому он еще поможет:
После применения патча:
Патч изменяет строку в файле /system/controllers/admin/actions/install_ftp.php
с
на
ошибка пропала.
Вывод
такой же
dump ($list); return false;
Что еще пожелаете чтобы я сделал?
Сейчас видно, что ftp_nlist возвращает структуру каталогов и файлов в 4-х разных форматах:
1. без слеша в начале (на моем домашнем сервере, денвер)
2. с одним слэшем (на моем боевом сервере на хостинге)
3. с двумя слэшами (Ваш случай)
4. с каталогами или без каталогов.
При проверке наличия нужных каталогов по указанному пути автоматически добавляется путь, который пользователь указывает в "Путь папки сайта".
Таким образом формируется нужное имя файла.
Сейчас подготовлю универсальный патч или его аналог, который позволит решить все 4 проблемы + апдейт, который в идеале нужно будет включить в следующий релиз.
Собирал информацию об ошибках :)
Патч предложен как возможное решение проблемы.Если Вы не заинтересованы, тогда не стоит рекомендовать Ваш патч как панацею.
Предложите свой вариант.Я заинтересован в решении проблемы, а не просто в полемике.
В данный момент вырабатываю универсальное решение.
И так на боевом сервере:
Array1. Давайте посмотрим, в каком формате nlist отдает список файлов и каталогов у Вас.
(
[0] => //cache
[1] => //system
[2] => //templates
[3] => //upload
[4] => //wysiwyg
[5] => //.htaccess
[6] => //bootstrap.php
[7] => //credits.txt
[8] => //cron.php
[9] => //index.php
[10] => //license.en.txt
[11] => //license.ru.txt
[12] => //readme.txt
[13] => //testing.html
[14] => //systemfieldstext.php.original
)
О как. Очень интересно… Получается, у вас еще один формат массива от ftp_nlist.
попробовал на своем боевом сервере (не InstantCMS, но для понимания подойдет)
Array
(
[14] => /favicon.ico
[17] => /includes
[18] => /tmp
[25] => /..
[38] => /sitemap.xml
[46] => /robots.txt
)
Таким образом, получаем еще одну причину ошибки при установке компонентов.
Спасибо за информацию :)
Блин… и матернуться хочеться и.....
Хорошо, чуть попозже отпишусь относительно запрошенных тестов.
Не воспринимайте это близко к сердцу, в т.ч. как оскорбление. И в мыслях не было :)
Материться точно не нужно. Все же конструктивный, а главное — аргументированный!, диалог гораздо полезнее и продуктивнее :)
Извините, но где Вы здесь увидели гонор?
Я такое говорил?тогда не стоит рекомендовать Ваш патч как панацею.
Может гонора то поубавить стоит?
Я предложил Вам сделать 3 простых действия, чтобы понять, как Ваш патч решает проблему.
Вы не ответили, указав ссылку на объяснение.
И на данный момент из полученной от Вас информации могу сделать только один вывод:
Фактически Вы сами не знаете, как работает Ваш патч. При этом Ваш патч работает на вашем собственном компоненте.
И Вы предлагаете его как решение всем.
Это неправильно.
Дело не в компоненте, а именно в алгоритме (и коде), отвечающем за загрузку.
Я использую свой компонент. Там только то что я описал используется. Других изменений нет.Поэтому еще раз: у Вас отличия или в формате возвращаемого массива от ftp_nlist, или были еще изменения по коду.
После добавления слеша — проблема решилась.
Не буду возражать — возможно это еще одно решение из множества других.
Я заинтересован в решении проблемы, а не просто в полемике.
Если Вы не заинтересованы, тогда не стоит рекомендовать Ваш патч как панацею.
Я читал это сообщение. Это не решение проблемы. Для строковых значений in_array использует регистрозависимый четкий поиск.
....ovo-skorpiona/patch-ispravlenie-oshibki-ustanovki-komponentov-po-ftp-dlja-komponenta-moi-patchi.html]тут[/url] я описал изменения.
В моем сообщении выше приведено содержание массива, в котором выполняется поиск нужных каталогов. И там все имена без слеша. Добавленный Вами слэш однозначно проблемы не решит.
Поэтому еще раз: у Вас отличия или в формате возвращаемого массива от ftp_nlist, или были еще изменения по коду.
Пока не знаю.
Я тоже не понимаю.Не совсем понимаю, как Ваш патч позволит решить проблему.
Без этого патча имею ошибку на своем сервере, а с ним -не имею.
Так как мой патч решает проблему — а?
1. Давайте посмотрим, в каком формате nlist отдает список файлов и каталогов у Вас.
Добавьте
dump ($list); return false;
и напишите ответ здесь. Интересно будет его посмотреть :)
2. Укажите вплоть до каждого символа значения Сервер и Путь папки сайта (конечно, обезличив сам адрес сайта)
3. Выложите содержимое или сам файл install_ftp.php. Хочу сравнить со своим.
Только что проверил вот что:
Вы это уже проверили?Это поможет, но не всем. Посмотрите мое сообщение чуть выше, п.1 про FTP серверы.
добавил dump ($list) после $check_dirs = array('system', 'templates');
На выходе:
1. Сервер Quick 'n Easy FTP Server 3.2 Lite
Array
(
[0] => .htaccess
[1] => ajax
[2] => bootstrap.php
[3] => cache
[4] => credits.txt
[5] => cron.php
[6] => index.php
[7] => license.en.txt
[8] => license.ru.txt
[9] => readme.txt
[10] => system
[11] => templates
[12] => upload
[13] => wysiwyg
)
2. Сервер XLight FTP server с отключенной опцией NLIST: with folders
Array
(
[0] => .htaccess
[1] => bootstrap.php
[2] => credits.txt
[3] => cron.php
[4] => index.php
[5] => license.en.txt
[6] => license.ru.txt
[7] => readme.txt
)
3. Сервер XLight FTP server с включенной опцией NLIST: with folders
Array
(
[0] => .htaccess
[1] => ajax
[2] => bootstrap.php
[3] => cache
[4] => credits.txt
[5] => cron.php
[6] => index.php
[7] => license.en.txt
[8] => license.ru.txt
[9] => readme.txt
[10] => system
[11] => templates
[12] => upload
[13] => wysiwyg
)
Не совсем понимаю, как Ваш патч позволит решить проблему.
Поясните, пожалуйста, как отработает функция !in_array($account['path']. $dir, $list) с Вашим патчем в версии 2.2.1?
Это поможет, но не всем. Посмотрите мое сообщение чуть выше, п.1 про FTP серверы.
Я напримеркто решил проблему?
И что же теперь менять хостера? Но у меня их два, и на обоих таже проблема.Первая проблема кроется непосредственно в FTP сервере,
Если Вы уверены, что указываете правильный путь, тогда можете в этом же файле перед кодом (примерно 103 строка)
return true;
Имейте ввиду, что если укажете путь неправильно, то компонент распакуется по неверному пути и полезут косяки. Поэтому внимательно.
Хотя я бы вообще порекомендовал все оттестить на локальной машине с локальным ФТП сервером, и только потом залить на хостинг.
- Предыдущая
- 1
- 2
- 3
- Следующая
- Показаны 16-30 из 33