upload in directory Apache

ZloyFox

Новичок
upload in directory Apache

На локалке стоит связка Apache 2.0 + Php 5.0, при upload, необходимо указывать абсолютный путь, например через $_SERVER["DOCUMENT_ROOT"], иначе загрузки не происходит, т.к. по умолчанию грузится в root Apache, т.е. в корневую директорию сервера. Но при использовании готовых скриптов, например shop-script, выявляется проблема в том, что скрипт написан с учётом относительных путей своего размещения. Как изменить точку назначения сохранения сервером файлов хотя бы на DocumentRoot без использования вышеупомянутой переменной? чувствую что в настройках нужно что-то поменять, но что именно, так и не нашёл (
 

DiMA

php.spb.ru
Команда форума
Опция tmp_upload или типа того, короче напрягись открыть доку, изучить конфигурирование пхп.
 

ZloyFox

Новичок
в том то и дело, что не спрашивал бы... tmp_upload настроен как надо (он отвечает за Временное хранение upload файлов на сервере, а не Куда их сохранять по умолчанию!), по поиску искал решение этой проблемы - так и не нашёл... лишь один человек высказал предположение, что так скомпилирован Apache 2.0, типа перекомпилируй или ставь 1.3 версию...
 

Фанат

oncle terrible
Команда форума
очень смешно читать такие вопросы про конфигурацию апача, когда человек просто не понимает, чем отличаются относительные пути от абсолютных.

ZloyFox
указывай свою точку назначения как хочешь. лишь бы это был реально существующий каталог.
 

ZloyFox

Новичок
Фанат совершенно точно понимаю разницу между относительными и абсолютными путями - иначе не спрашивал бы! и смеятся не нужно, если не знаете ответа. ещё раз повторюсь что для Своих скриптов, мне не трудно использовать абсолютный путь, но используя готовые скрипты типа shop-script, в них импорт файлов идёт в ту директорию, где стоит сам shop-script, а т.к. Апач у меня сохраняет по умолчанию в свою директорию, появляется сообщение об ошибке, что upload неудачный... вопрос кажется ясно изложен. Покачто данную проблему решал только ручной правкой таких скриптов, но решил копнуть глубже, и узнать причину такого поведения Апача - может быть я упустил какую-то опцию или строчку конфигурации, я не спорю - но Укажите мне это, к вам обращаюсь за помощью, советом, а в ответ что можно получить? сарказм и смех "свысока"?
 

Фанат

oncle terrible
Команда форума
читай главу про аплоад в документации по пхп.
твои представления об этом процессе имеют значительные расхождения с реальностью.
 

ZloyFox

Новичок
согласен - трудно поверить, что происходит так, как я расказал... но при чём тут пхп, если в php.ini нигде не стоит указание на директорию Apache? ведь пхп является модулем Apache, а не наоборот, всеми действиями руководит сервер, т.е. сам Апач сохраняет в свою директорию файл... жуть, словно говорим о разных вещах. а про документацию можно не упомянать - читал не только там, но также и в php-inside, там кажется статья из этого форума, и на php-net, мне нравится самому решать проблемы такого уровня - но в этом случае я просто зашёл в тупик.
P.S. странно, извините, если кого-нибудь оскорбляю, но ведь обратился за помощью конкретной, а не за тем, чтобы меня послали )
 

Фанат

oncle terrible
Команда форума
читай главу про аплоад в документации по пхп.
твои представления об этом процессе имеют значительные расхождения с реальностью.
 

ZloyFox

Новичок
это даже не спор ) укажу конфиги на моём компе, и простенький скрипт, а также результат его выполнения, дальше сами судите - правильно я делаю, или нет:

c:\WebServer\
Apache2\conf\httpd.conf
home\localhost\www\index.php|action.php
Php5\php.ini
tmp\

php.ini
file_uploads = On
upload_tmp_dir = "../tmp"
upload_max_filesize = 16M

httpd.conf
ServerRoot "C:/WebServers/Apache2"
DocumentRoot "C:/WebServers/home"
UserDir disabled
<VirtualHost *:80>
DocumentRoot C:/WebServers/home/localhost/www
ServerName localhost
</VirtualHost>

index.php
<form enctype="multipart/form-data" action="action.php" method="post">
<input type="hidden" name="MAX_FILE_SIZE" value="300000">
Send: <input name="userfile" type="file">
<input type="submit" value="Send">
</form>

action.php ( Добавляю код для отладки вышеупомянутой проблеммы)
<?php
$uploaddir = '';
$uploadfile = $uploaddir . basename($_FILES['userfile']['name']);
if (move_uploaded_file($_FILES['userfile']['tmp_name'], $uploadfile)) {
echo "File is uploaded.<br>";
} else {
echo "File is not upload.<br>"; }
echo '$_FILES[\'userfile\'][\'name\'] - '.$_FILES['userfile']['name'].'<br>';
echo '$_FILES[\'userfile\'][\'type\'] - '.$_FILES['userfile']['type'].'<br>';
echo '$_FILES[\'userfile\'][\'size\'] - '.$_FILES['userfile']['size'].'<br>';
echo '$_FILES[\'userfile\'][\'tmp_name\'] - '.$_FILES['userfile']['tmp_name'].'<br>';
echo '$_FILES[\'userfile\'][\'error\'] - '.$_FILES['userfile']['error'].'<br>';
?>

После првоедения всем известных действий, появляется сообщение:
File is uploaded.
$_FILES['userfile']['name'] - Untitled-1.jpg
$_FILES['userfile']['type'] - image/jpeg
$_FILES['userfile']['size'] - 110452
$_FILES['userfile']['tmp_name'] - ../tmp\php182.tmp
$_FILES['userfile']['error'] - 0

в итоге - файл сохранён,как C:\WeServer\Apache2\Untitled-1.jpg

и снова вернусь "к своим баранам", таким методом, т.е. через $uploaddir = '' в shop-script используется импорт файлов, и приходилось вручную добавлять указание на абсолютный путь, и на этой почве возник вопрос, откуда Апач решил, что надо сохранять в свою директорию? где ошибка в настройках? меня интересует - почему программисты используют для upload относительный путь, а мне приходится применять абсолютный? если заблуждаюсь, что же, прийдётся вручную добавлять код, но мне хотелось бы быть уверенным в том, что это не пустая трата времени, когда всё намного проще )
 

Фанат

oncle terrible
Команда форума
почему в скрипте отсутствует вывод $uploadfile и getcwd()?

-~{}~ 23.04.07 12:47:

не понял.
что за бред?
как этот код может вывести сообщение
File is uploaded.
$_FILES['userfile']['name'] - Untitled-1.jpg
???

-~{}~ 23.04.07 12:59:

но upload_tmp_dir = "../tmp" - это я уж не знаю, чем надо думать, чтобы указывать относительный путь.
с одной стороны, напрямую к вопросу и не относится, но с другой - при таком-то коде - всяко может быть...
 

ZloyFox

Новичок
добавил вывод $uploadfile и getcwd() - получилось:
Untitled-1.jpg
C:\WebServers\home\localhost\www

по поводу отностительного пути... даже не знаю, привычка делать доступ ко всему по относительному пути, чтобы впоследствии было легко переносить проекты в другое место, дань ООП.
 

Фанат

oncle terrible
Команда форума
где ответ на второй вопрос?

я, в общем, уже понимаю причину твоих страданий, и она, как всегда, дурацкая.
начни понимать и ты.
Для начала напиши код, который работает.

-~{}~ 23.04.07 13:24:

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

ZloyFox

Новичок
не буду спорить по поводу отдельных каталогов - я переношу проекты с работы домой, мне так удобно, поэтому это спор о палке с двумя концами.
ответ на второй вопрос - потомучто выполняется условие
if (move_uploaded_file($_FILES['userfile']['tmp_name'], uploadfile)) Другого ответа не нахожу, т.е. файл перемещается из директории временных файлов, указанной в php.ini в папку, указанной uploadfile, т.е. в папку, которая якобы открыта сервером на данный момент при обработке скрипта. Но, почему эта папка не указывает на рабочую папку скрипта, а указывает на сам ServerRoot...
 

Фанат

oncle terrible
Команда форума
ответ неправильный.
для правильного ответа выполняем два действия
1. записываем скрипт, написанный здесь, в файл и запускаем его.
2. пишем здесь результат.
или же
пишем здесь тот скрипт, который выводит приведенный здесь результат

в общем, приводим в соответстие написанное с реальн6остью.
И настоятельно рекомендую тебе сделать это с первого раза.
чтобы не было повторных уговоров с моей тороны и "ой, я не то запостил, ай не так написал" - с твоей.

-~{}~ 23.04.07 14:10:

про указание относительных каталогов у тебя та же самая каша в голове и та же самая полная учверенность в своей правоте и в прямизне своих кривых рук.
рекомендую снять розовые очки
 

ZloyFox

Новичок
уважаемый Фанат, в самом деле уважаю как вас, так и ваш труд, т.к. имел честь общатся с теми, кто знает вас немного, а также лицезрея ваши попытки снять со многих здесь розовые очки, но поверьте мне - я ввёл тот скрипт, который здесь описан, даже уже подумал о том, чтобы это записать на видео, т.к. первый человек, которому показал это, тоже не поверил, что так происходит, и развёл руками, и именно по этой причине решил сюда обратится, т.к. человек я новый, и связей обширных не имею, а документация мне не помогла, хотя угробил на неё немало времени. Так вот, ввёл я имеенно этот код(мне приятнее всё таки это слово, чем слово - скрипт), что выложен мною тут и вот его результат:

File is uploaded.
$_FILES['userfile']['name'] - Crazy.jpg
$_FILES['userfile']['type'] - image/jpeg
$_FILES['userfile']['size'] - 110452
$_FILES['userfile']['tmp_name'] - C:\WebServers\tmp\php27F.tmp
$_FILES['userfile']['error'] - 0
$uploadfile - Crazy.jpg
getcwd() - C:\WebServers\home\localhost\www

можете меня убивать...

по поводу "../tmp" принял к сведенью - цельное замечание, дало мне взглянуть на это глазами другого программиста.
 

ZloyFox

Новичок
вот - файл action.php

<?php
$uploaddir = '';
$uploadfile = $uploaddir . basename($_FILES['userfile']['name']);
if (move_uploaded_file($_FILES['userfile']['tmp_name'], $uploadfile)) {
echo "File is uploaded.<br>";
} else {
echo "File is not upload.<br>"; }
echo '$_FILES[\'userfile\'][\'name\'] - '.$_FILES['userfile']['name'].'<br>';
echo '$_FILES[\'userfile\'][\'type\'] - '.$_FILES['userfile']['type'].'<br>';
echo '$_FILES[\'userfile\'][\'size\'] - '.$_FILES['userfile']['size'].'<br>';
echo '$_FILES[\'userfile\'][\'tmp_name\'] - '.$_FILES['userfile']['tmp_name'].'<br>';
echo '$_FILES[\'userfile\'][\'error\'] - '.$_FILES['userfile']['error'].'<br>';
echo '$uploadfile - '.$uploadfile.'<br>';
echo 'getcwd() - '.getcwd();
?>
 

Фанат

oncle terrible
Команда форума
тьфу ты, блин.
это ж надо фигурную скобку в конце строки ставить


смотри свою проблему на bugs.php.net

-~{}~ 23.04.07 15:11:

и попробуй поставить пхп поновее
 
Сверху