[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Проблема со скриптами загрузки и копирывания
awam
Доброе время суток.
Стоит 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.phpmethod="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 (папка существует)

А сервер говорит что не существует wink.gif

$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 Огромное спасибо за подскаску с разъяснениями ошибок, я по простоте душевной думал, что это колличество, скрипт заработал, продолжаю курить маны. Всем спасибо за помощь smile.gif

Спустя 13 часов, 19 минут, 50 секунд (20.06.2009 - 08:20) Guest написал(а):
Если интересно то конечный вариант скрипта загрузки выглядел так

PHP
<form enctype="multipart/form-data" 
    
action="/temp/upload.phpmethod="post">
  <
input type="hidden" name="MAX_FILE_SIZE"
    
value="3000000" />
  
Загрузить файл: <input type="file" 
    
name="myfile" /><br>
  <
input type="submit" 
    
value="Отправить файл" />
</
form>
<?
error_reportingE_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 полный путь к папке загрузки
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.