Правила     Закладки     Карма    Календарь    Журналы    Помощь    Поиск    PDA    Чат   
        СМС-ки
   
Пейджер выключен!
Страницы: (2) [1] 2  ( Перейти к первому непрочитанному сообщению )  
Фильтр авторов:    показать 
  скрыть
  Ответ в темуСоздание новой темыСоздание опроса

> Сохранение файлов на сервер
kostr  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Пользователь
**

Профиль
Группа: Пользователь
Сообщений: 67
Пользователь №: 41917
На форуме: 1 год, 9 месяцев, 15 дней
Карма: 3




После переезда на новый сервер началось непонятное. У нас иногда бывает массовая загрузка файлов - они читаются из сети и записываются функцией php file_put_contents в определенную папку. На старом сервере все было нормально. На новом большая часть файлов пишется не туда. Они пишутся сначала одной папкой выше, потом еще одной, еще и так до корня.

Грубо говоря, если нужная папка home/sites/app/tmp, то часть файлов будет именно там и называться как надо,
еще часть - в папке home/sites/app с названиями tmp_01, tmp_02 ...
еще часть - в папке home/sites с названиями app_01, app_02 ...
еще часть - в папке home с названиями sites_01, sites_02 ...
и большая часть прямо в корне с названиями _01, _02 ... ho_01, ho_02 ... home_01, home_02 ...

Что это может быть? Какая-то настройка сервера неправильная?
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Invis1ble  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме




******

Профиль
Группа: Эксперт
Группа переписки
Сообщений: 11965
Пользователь №: 23195
На форуме: 6 лет, 11 месяцев, 26 дней
Карма: 435

Трезвый :
7 лет, 10 месяцев, 26 дней


скорее проблема в коде, но ты его нам не показываешь

PS. давать права на запись серверу куда угодно - помогать потенциальному злоумышленнику


--------------------
PMПисьмо на e-mail пользователюСайт пользователя
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
kostr  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Пользователь
**

Профиль
Группа: Пользователь
Сообщений: 67
Пользователь №: 41917
На форуме: 1 год, 9 месяцев, 15 дней
Карма: 3




Сервер настраивала не я. Я вообще не умею.
На старом сервере код работал как надо, ничего подобного не было.
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Invis1ble  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме




******

Профиль
Группа: Эксперт
Группа переписки
Сообщений: 11965
Пользователь №: 23195
На форуме: 6 лет, 11 месяцев, 26 дней
Карма: 435

Трезвый :
7 лет, 10 месяцев, 26 дней


Цитата (kostr @ 24.01.2016 - 13:00)
На старом сервере код работал как надо, ничего подобного не было.

это я уже понял, но это не значит, что настройка текущего сервера неправильная
показывай код file_put_contents


--------------------
PMПисьмо на e-mail пользователюСайт пользователя
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Миша  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: ★ЛжеЭксперт★
Завсегдатай форума
Сообщений: 2641
Пользователь №: 37963
На форуме: 3 года, 11 месяцев, 9 дней
Карма: 29




Как сказано выше, вероятно проблема в коде. Показывайте код, только тогда вам вероятно кто-то поможет.

А так можно только предположить: Ваш скрипт ломает путь, куда идёт запись, скорее всего путь записан в переменную (желательно в константу записать), потому как отваливается по одному каталогу, а названием файлов становится название каталогов.


--------------------
Принимаю заказы, писать в ЛС
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
kostr  
 ۩  [x] Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Пользователь
**

Профиль
Группа: Пользователь
Сообщений: 67
Пользователь №: 41917
На форуме: 1 год, 9 месяцев, 15 дней
Карма: 3




Ну вот код:

if (stripos ($url, 'http://' ) !== 0) {
$url = 'http://'.$url;
|

$fileName = basename($url);
$fileName = strtolower($fileName);
$n = strrpos($fileName, '?');
if ($n) $fileName = substr($fileName, 0, $n);

$n = strrpos($fileName, '.');
if (!$n) return false;
$ext = substr($fileName, $n);
if ($ext == '.php') $ext = '.txt';

$tmp_dir = 'tmp';
$fileName = $_SERVER['DOCUMENT_ROOT'].$tmp_dir.'/'.$fileName;

$file = file_get_contents($url);
if (!$file) return false;
file_put_contents($fileName, $file);
if (file_exists($fileName))
return $fileName;
return false;


Это сообщение отредактировал Invis1ble - 24.01.2016 - 13:28
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
kostr  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Пользователь
**

Профиль
Группа: Пользователь
Сообщений: 67
Пользователь №: 41917
На форуме: 1 год, 9 месяцев, 15 дней
Карма: 3




Там еще есть функция проверки расширения, но она ничего не меняет, просто проверяет.
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Invis1ble  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме




******

Профиль
Группа: Эксперт
Группа переписки
Сообщений: 11965
Пользователь №: 23195
На форуме: 6 лет, 11 месяцев, 26 дней
Карма: 435

Трезвый :
7 лет, 10 месяцев, 26 дней


это точно код, который крутится на сервере? дело в том, что тут синтаксическая ошибка и он не будет работать ;)

$fileName = basename($url);

почитай в мануале, для чего используется basename (подсказка: не для парсинга URL; для него следует использовать https://secure.php.net/manual/ru/function.parse-url.php)

$fileName = $_SERVER['DOCUMENT_ROOT'].$tmp_dir.'/'.$fileName;

$_SERVER['DOCUMENT_ROOT'] разве заканчивается на слэш? могу ошибаться конечно, но насколько я помню - нет

вообще логика формирования $fileName запутанная, скорее всего ошибка кроется в ней - туда попадает что-то лишнее


--------------------
PMПисьмо на e-mail пользователюСайт пользователя
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Миша  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: ★ЛжеЭксперт★
Завсегдатай форума
Сообщений: 2641
Пользователь №: 37963
На форуме: 3 года, 11 месяцев, 9 дней
Карма: 29




Цитата (Invis1ble @ 24.01.2016 - 13:40)
это точно код, который крутится на сервере? дело в том, что тут синтаксическая ошибка и он не будет работать ;)

$fileName = basename($url);


+1
$fileName = $_SERVER['DOCUMENT_ROOT'].$tmp_dir.'/'.$fileName;

Заменить на
$fileName = "/home/sites/app/tmp/".$fileName;


Что получится?


--------------------
Принимаю заказы, писать в ЛС
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
kostr  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Пользователь
**

Профиль
Группа: Пользователь
Сообщений: 67
Пользователь №: 41917
На форуме: 1 год, 9 месяцев, 15 дней
Карма: 3




$fileName = basename($url);


Да, именно так и работает. Не знаю, что тут не так. $url передается в функцию как параметр, это адрес файла в сети.

Медведь, если уж ничего другого не останется, поставлю прямо так, да.
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Invis1ble  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме




******

Профиль
Группа: Эксперт
Группа переписки
Сообщений: 11965
Пользователь №: 23195
На форуме: 6 лет, 11 месяцев, 26 дней
Карма: 435

Трезвый :
7 лет, 10 месяцев, 26 дней


Цитата (kostr @ 24.01.2016 - 13:50)
Не знаю, что тут не так.

Я уже написал, что тут не так. Эта функция используется не по назначению.


--------------------
PMПисьмо на e-mail пользователюСайт пользователя
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
kostr  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Пользователь
**

Профиль
Группа: Пользователь
Сообщений: 67
Пользователь №: 41917
На форуме: 1 год, 9 месяцев, 15 дней
Карма: 3




А каково же ее назначение, в таком случае? Мне нужно имя файла. Без пути. Именно его она и возвращает.

Функция basename
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Invis1ble  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме




******

Профиль
Группа: Эксперт
Группа переписки
Сообщений: 11965
Пользователь №: 23195
На форуме: 6 лет, 11 месяцев, 26 дней
Карма: 435

Трезвый :
7 лет, 10 месяцев, 26 дней


во-первых, официальный мануал находится на другом ресурсе https://secure.php.net/manual/ru/function.basename.php (но это так, лирическое отступление)
во-вторых, basename() используется для парсинга физического пути, а не URL

еще раз:
URL - http://phpforum.su/index.php
Путь к файлу - /home/blablabla/index.php


--------------------
PMПисьмо на e-mail пользователюСайт пользователя
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Миша  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: ★ЛжеЭксперт★
Завсегдатай форума
Сообщений: 2641
Пользователь №: 37963
На форуме: 3 года, 11 месяцев, 9 дней
Карма: 29




Цитата (kostr @ 24.01.2016 - 13:53)
А каково же ее назначение, в таком случае? Мне нужно имя файла. Без пути. Именно его она и возвращает.



--------------------
Принимаю заказы, писать в ЛС
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
kostr  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Пользователь
**

Профиль
Группа: Пользователь
Сообщений: 67
Пользователь №: 41917
На форуме: 1 год, 9 месяцев, 15 дней
Карма: 3




Не поняла. Я не могу получить этой функцией имя файла из сетевого адреса? Она для этого не годится? Всегда работало, однако.

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

В следующую загрузку попытаюсь последовать совету Медведя, а пока тему можно закрыть.
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
  Быстрый ответ
Информация о Госте
Введите Ваше имя
Кнопки кодов
Для вставки цитаты, выделите нужный текст и
НАЖМИТЕ СЮДА
Введите сообщение
Смайлики
:huh:  :o  ;) 
:P  :D  :lol: 
B)  :rolleyes:  <_< 
:)  :angry:  :( 
:unsure:  :blink:  :ph34r: 
     
Показать всё

Опции сообщения  Включить смайлики?
 Включить подпись?
 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:

Опции темыСтраницы: (2) [1] 2  Ответ в темуСоздание новой темыСоздание опроса