Доброе время суток.
Стоит 2 задачи.
Задача №1
Есть 2 сервера в локальной сети с адресами
http://192.168.1.1 и
http://192.168.1.2Второй сервер имеет внешний IP адрес
Нужно по обращению к
скрипту из интернета скопировать файл с сервера
http://192.168.1.1/file.ext на второй сервер
http://192.168.1.2/tempЕсли на сервере на который нужно скопировать, такой файл уже имеется, то нужно его заменить, после чего вывести в браузер, либо никаких действий, главное, чтобы файл скопировался.
Исполняемый
скрипт лежит на сервере
http://192.168.1.2, т.е на том который смотрит в интернет.
Я сделал так
PHP |
<?php $file_name="file.ext"; $data = file_get_contents('http://192.168.1.1/'.$file_name); $h = fopen($file_name,'w'); fwrite($h,$data); fclose($h); |
При запуске скрипт выдает следующие ошибки
Warning: fopen(image.jpg) [function.fopen]: failed to open stream: Permission denied in /var/www/temp/copy.php on line 14
Warning: fwrite(): supplied argument is not a valid stream resource in /var/www/temp/copy.php on line 15
Warning: fclose(): supplied argument is not a valid stream resource in /var/www/temp/copy.php on line 16
лайн14 это момент открытия на запись $h = fopen($file_name,'w');
Что я сделал не так?..
Задача№2
Нужно загрузить файл на сервер, я сделал так
PHP |
<form enctype="multipart/form-data" action="/temp/upload.php" method="post"> <input type="hidden" name="MAX_FILE_SIZE" value="30000" /> Загрузить файл: <input type="file" name="myfile" /><br> <input type="submit" value="Отправить файл" /> </form> <? $uploaddir = '/upload/'; $destination = $uploaddir . $_FILES['myfile']['name']; print "<pre>"; if (move_uploaded_file( $_FILES['myfile']['tmp_name'], $destination)) { print "Файл успешно загружен <br>"; } else { echo "Произошла ошибка при загрузке файла. Некоторая отладочная информация:<br>"; print_r($_FILES); } print "</pre>"; |
При выполнении скрипт ругается
Warning: move_uploaded_file(/upload/image003.jpg) [function.move-uploaded-file]: failed to open stream: No such file or directory in /var/www/temp/upload.php on line 28
Warning: move_uploaded_file() [function.move-uploaded-file]: Unable to move '/tmp/php3GaF9A' to '/upload/image003.jpg' in /var/www/temp/upload.php on line 28
Произошла ошибка при загрузке файла.
Некоторая отладочная информация:
PHP |
Array ( [myfile] => Array ( [name] => image003.jpg [type] => image/jpeg [tmp_name] => /tmp/php3GaF9A [error] => 0 [size] => 2451 ) ) |
Как я понял файл загрузился на сервер, но не смог перенестись из временной папки в /upload (папка существует)
лайн28 это как раз $destination)), говорит что не видит папки куда надо грузить или ее нет, всю голову уже сломал. Какие будут советы?
В
php.ini allow_url_fopen=On и register_globals=On
Спустя 46 минут, 33 секунды (18.06.2009 - 19:05) kirik написал(а):
Цитата (awam @ 18.06.2009 - 10:18) |
Warning: fopen(image.jpg) [function.fopen]: failed to open stream: Permission denied in /var/www/temp/copy.php on line 14 |
Очевидно права на папку/файл не разрешают ничего писать.
Цитата (awam @ 18.06.2009 - 10:18) |
Warning: move_uploaded_file(/upload/image003.jpg) [function.move-uploaded-file]: failed to open stream: No such file or directory in /var/www/temp/upload.php on line 28....не смог перенестись из временной папки в /upload (папка существует) |
А сервер говорит что не существует
$uploaddir = '/upload/'; это не тоже самое что и
$uploaddir = './upload/';.
Спустя 6 часов, 42 минуты, 23 секунды (19.06.2009 - 01:47) awam написал(а):
хм, я не думал, что тут нужно обращение к текущей папке делать, спасибо попробую, с правами тоже поэкспериментирую
Спустя 12 часов, 19 минут, 32 секунды (19.06.2009 - 14:07) awam написал(а):
Со скриптом копирывания разобрался, подправил права на папку.
А вот со скриптом загрузки не получается, раньше хоть ругался на то что папки не существует, но во временый каталог копирывал (это было ясно из выводимых
PHP |
Array ( [myfile] => Array ( [name] => image003.jpg [type] => image/jpeg [tmp_name] => /tmp/php3GaF9A [error] => 0 [size] => 2451 ) ) |
)
теперь же даже никаких предупреждений не выводит, просто выводит
PHP |
Array ( [myfile] => Array ( [name] => 329ad5f07882.jpg [type] => [tmp_name] => [error] => 2 [size] => 0 )
) |
Но какие ошибки не ясно, в начале скрипта стоит error_reporting( E_ALL & E_STRICT ); лазил по логам апача, в ошибках по поводу скрипта ничего не нашел, только в логах доступа, есть информация, что скрипт вызывался.
Даже попробовал уже поставить права на папку upload 777 и прописать полный путь к скрипту и папке аплоада типа /var/www/temp/upload.php , папка upload находиться в той же директории, что и скрипт.
Спустя 42 минуты, 39 секунд (19.06.2009 - 14:49) twin написал(а):
PHP |
$uploaddir = '/upload/'; |
первый слэшик попробуй убрать
Спустя 1 час, 37 минут, 9 секунд (19.06.2009 - 16:27) kirik написал(а):
Цитата (awam @ 19.06.2009 - 06:07) |
[error] => 2 |
Цитата |
UPLOAD_ERR_FORM_SIZE
Значение: 2; Размер загружаемого файла превысил значение MAX_FILE_SIZE, указанное в HTML-форме. |
Тоесть пробуй залить файл поменьше, или увелич MAX_FILE_SIZE в форме.
Спустя 2 часа, 33 минуты, 33 секунды (19.06.2009 - 19:00) awam написал(а):
kirik Огромное спасибо за подскаску с разъяснениями ошибок, я по простоте душевной думал, что это колличество,
скрипт заработал, продолжаю курить маны. Всем спасибо за помощь
Спустя 13 часов, 19 минут, 50 секунд (20.06.2009 - 08:20) Guest написал(а):
Если интересно то конечный вариант скрипта загрузки выглядел так
PHP |
<form enctype="multipart/form-data" action="/temp/upload.php" method="post"> <input type="hidden" name="MAX_FILE_SIZE" value="3000000" /> Загрузить файл: <input type="file" name="myfile" /><br> <input type="submit" value="Отправить файл" /> </form> <? error_reporting( E_ALL & E_STRICT ); $uploaddir = '/var/www/temp/upload/'; $destination = $uploaddir . $_FILES['myfile']['name']; print "<pre>"; if (move_uploaded_file( $_FILES['myfile']['tmp_name'], $destination)) { print "Файл успешно загружен <br>"; } else { echo "Произошла ошибка при загрузке файла. Некоторая отладочная информация:<br>"; print_r($_FILES); } print "</pre>";
|
action="/temp/upload.php" путь к скрипту относительно сайта
$uploaddir полный путь к папке загрузки