не могу изменить по Ftp файл

  • Автор темы RommzeS
  • Дата начала
Статус
Закрыто для дальнейших ответов.
R

RommzeS

#1
задача - открыть файл на локальном диске вывести в окно браузера и записать в файл на сервере вместе с IP и датой
подскажите что не правильно?
<html><body>
IP-: <?=@$_SERVER['REMOTE_ADDR']?><br>
</body></html>
<?php
// вывод дат:
echo date("время h:i:s A")."<br>";
echo date("сегодня d.m.Y")."<br>";

$file = "c:/ddd.txt"; //ищем файл
$fh = fopen($file, "a+") or die("файла ($file) несуществует!");
//пробуем открыть
print "<hr>файл найдем и открыт!";
$fs = filesize("c:/ddd.txt"); //выводим размер
print "файл имеет размер $fs байт.<hr>";

//ищем файл на сервере
$file = "file.txt";
$fh = fopen($file, "a+") or die("файла ($file) несуществует!"); //пробуем открыть
print "<hr>файл найден и открыт!";
$fs = filesize("file.txt"); //размер
print "файл имеет размер $fs байт.<hr>";

$filename = "file.txt";

if ( is_writeable($filename) ) :

$fh = fopen($filename, "a+b");// открываем и помещаем указатель в конец

//пишем содержимое в файл
$success - fwrite($fh, $_SERVER['REMOTE_ADDR']);

// закрываемfclose($fh); else :
print "не могу открыть $filename для записи";
endif;
?>

что тут надо изменить ?
 
H

Holger Dee Assuran

#2
По моему функция fopen() - должна принимать путь к файлу и режим доступа.
Мне кажется неправильной строчка
$fh = fopen($filename, "a+b");// открываем и помещаем указатель в конец
 
R

RommzeS

#3
$file= "file.txt"; //создаём файл

if ( is_writeable($file) ) : //проверка на запись

$fh = fopen($file, "a+"); //открываем и ставим указатель в конец файла

должно получиться так?
 
T

TSnake

#4
<!--QuoteBegin-RommzeS+28:04:2007, 11:23 -->
<span class="vbquote">(RommzeS @ 28:04:2007, 11:23 )</span><!--QuoteEBegin-->$file = "c:/ddd.txt"; //ищем файл
[snapback]63855" rel="nofollow" target="_blank[/snapback]​
[/quote]
долго придётся искать :)
файл сначала нужно upload'ить на сервер через форму, а потом уже сохранять и выводить
 
D

destr

#5
во-первых,
//ищем файл на сервере
$file = "file.txt";
$fh = fopen($file, "a+") or die("файла ($file) несуществует!"); //пробуем открыть
fopen будет искать на сервере файл, если ты будешь указывать в виде ulr т.е. или http://... или ftp:// только в этом случае она будет пытаться найти обработчик нужного протокола, тут у тебя уже fopen открывает локалный файл, точнее говоря, пытается открыть там, где запускается скрипт.
ну и во-вторых, если работаешь по ftp то и используй ftp_put и ftp_get

ну как вариант

Код:
<?php
/*
* Считаем что соединение с фтп установлено, мы авторизованы.. 
*/
$remoutfile = "/pub/file.txt";
$localfile = "file_".time().".txt";
// загрузим файл с фтп
if(!ftp_get($ftp_conn, $localfile, $remoutefile, FTP_BINARY))
die("ну не смог я загрузить.ё");

$fs = filesize($localfile); //размер
print "файл имеет размер $fs байт.<hr>";

if(!is_writeable($localfile))
return;

$fh = fopen($filename, "a+b");


if(!fwrite($fh, $_SERVER['REMOTE_ADDR']))
{
echo "Не удалось записать";
return;
}
fclose($localfile);
if(!ftp_put($ftp_conn, $remotefile, $localfile, FTP_BINARY))
echo "Не удалось загрузить файл $localfile обратно на сервер"
?>
 
R

RommzeS

#6
у меня стоит Apache/2.0.59 (Win32) PHP/5.1.6

идут одни ошибки.
не могу понять почему.
в книгах либо нет ничего по этим фонкциям либо написано оччень мало...

дайте плиз скрипт который из файла *txt на локальном диске пишет
содержимое в файл *txt на сервере
либо линк на хорошую инфо как это написать...
 
R

RommzeS

#7
ошибки такие

Notice: Undefined variable: ftp_conn in F:\home\localhost\55.php on line 20

Notice: Undefined variable: remoutefile in F:\home\localhost\55.php on line 20

....

если убрать строки из *php файла -->

if(!ftp_get($ftp_conn, $localfile, $remoutefile, FTP_BINARY))
die("не могу загрузить.¸");

то получаю

Warning: filesize() [function.filesize]: stat failed for file_1178099518.txt in T:\home\localhost\55.php on line 22
файл имеет размер байт.


меняю

$localfile = "file_".time().".txt";

на

$localfile = "c:/1.txt";

и получаю


Соединение с 192.168.000.002, и логином - óäàëîñü

--------------------------------------------------------------------------------
файл имеет размер 11 байт.
--------------------------------------------------------------------------------

Notice: Undefined variable: filename in T:\home\localhost\55.php on line 28

Warning: fwrite(): supplied argument is not a valid stream resource in T:\home\localhost\55.php on line 31
Не удалось записать

...........
и выходит что в файл на локальном диске скрипт пишет IP

строка if(!fwrite($fh, $_SERVER['REMOTE_ADDR']))

а на сервере

...........
я вообщето только начал пробовать себя в PHP ....
и пока ещё не очень хорошо получается. ...
и спасибо за отклики!
 
D

destr

#8
классно пишешь, если убрать, то так
вот тебе полный код, с установкой соединения... мы устанавливаем соединение, загружаем себе файл , дописываем и записываем обратно и закрываем соединение.
тут два момента. должны быть права на создание файла, и на перезапись на фтп иначе функция ftp_put завершится с ошибкой

Код:
<?php

//ftp - сервер
define("FTP_SERVER", "217.25.1.191");
//ftp - пользователь
define("FTP_USER", "root");
//пароль
define("FTP_PASS", "qwertyui");

//установим соединение с ftp
$ftp_conn = ftp_connect(FTP_SERVER) or die("НЕ могу подключится к серверу");

//залогинимся
if(!ftp_login($ftp_conn, FTP_USER, FTP_PASS))
{
ftp_close($ftp_conn);
die("Не смог аутентифицироваться, расстроился и умираю:)bye");
}

$remoutefile = "/pub/test.txt";
$localfile = "file_".time().".txt";

// загрузим файл с фтп
if(!ftp_get($ftp_conn, $localfile, $remoutefile, FTP_BINARY))
die("ну не смог я загрузить.ё");

$fs = filesize($localfile); //размер
print "файл имеет размер $fs байт.<hr>";

if(!is_writeable($localfile))
return;

$fh = fopen($localfile, "a+b");


if(!fwrite($fh, $_SERVER['REMOTE_ADDR']))
{
echo "Не удалось записать";
return;
}
fclose($fh);

if(!ftp_put($ftp_conn, $remoutefile, $localfile, FTP_BINARY))
echo "Не удалось загрузить файл $localfile обратно на сервер $remoutefile";

ftp_close($ftp_conn);

//удалим файл ведь он нам больше не нужен
unlink($localfile);

?>
 
Статус
Закрыто для дальнейших ответов.