Помогите с функцией php

Пуховой
На сайте с 17.11.2007
Offline
154
868

Здравствуйте!

Имеется строчка:

file_put_contents("base/last.txt", $last);

Но функция file_put_contents, насколько мне известно, появилась в PHP 5, а на сервере PHP 4 и менять не хоцца... :(

Как переписать эту строчку, чтобы работало в PHP 4?

Заранее спасибо.

С уважением, Пуховой.

edogs software
На сайте с 15.12.2005
Offline
775
#1

Примерно так

file_put_contentz("base/last.txt", $last);

function file_put_contentz($file,$content) {

$h=fopen($file,'wb');

fwrite($h,$content,strlen($content));

fclose($h);

}

Разработка крупных и средних проектов. Можно с криптой. Разумные цены. Хорошее качество. Адекватный подход. Продаем lenovo legion в спб, дешевле магазинов, новые, запечатанные. Есть разные. skype: edogssoft
[Удален]
#2

Иногда не дописывается. Бывают баги. Вот функция с проверкой записи.


function fwrite_with_retry($sock, &$data)
{
$bytes_to_write = strlen($data);
$bytes_written = 0;

while ( $bytes_written < $bytes_to_write )
{
if ( $bytes_written == 0 ) {
$rv = fwrite($sock, $data);
} else {
$rv = fwrite($sock, substr($data, $bytes_written));
}

if ( $rv === false || $rv == 0 )
return( $bytes_written == 0 ? false : $bytes_written );

$bytes_written += $rv;
}

return $bytes_written;
}

Вызывать примерно так:

$rv = fwrite_with_retry($sock, $request_string);

if ( ! $rv )
die("unable to write request_string to socket");
if ( $rv != strlen($request_string) )
die("sort write to socket on writing request_string");

А вот если надо быстро и кратко:

<?

$file = "counter.txt";

if ( !file_exists($file)){
touch ($file);
$handle = fopen ($file, 'r+');
$str = "<? \$count=0 ?>";

}
else{
include "counter.txt";
$count++;
$str = "<? \$count=".$count." ?>";
$handle = fopen ($file, 'r+');
}

fwrite ($handle, $str);
fclose ($handle);

?>
[Удален]
#3

kapow_expert, полную фигню написали. Вариант edogs исчерпывающий.

[Удален]
#4

<?php

$filename = 'test.txt';
$somecontent = "Add this to the file\n";

// Let's make sure the file exists and is writable first.
if (is_writable($filename)) {

// In our example we're opening $filename in append mode.
// The file pointer is at the bottom of the file hence
// that's where $somecontent will go when we fwrite() it.
if (!$handle = fopen($filename, 'a')) {
echo "Cannot open file ($filename)";
exit;
}

// Write $somecontent to our opened file.
if (fwrite($handle, $somecontent) === FALSE) {
echo "Cannot write to file ($filename)";
exit;
}

echo "Success, wrote ($somecontent) to file ($filename)";

fclose($handle);

} else {
echo "The file $filename is not writable";
}
?>

пример из мануала, почему бы сначала туда не заглядывать? не понимаю.

BasterYC
На сайте с 30.10.2007
Offline
148
#5
Пуховой:
Здравствуйте!

Имеется строчка:
file_put_contents("base/last.txt", $last);

Но функция file_put_contents, насколько мне известно, появилась в PHP 5, а на сервере PHP 4 и менять не хоцца... :(

Как переписать эту строчку, чтобы работало в PHP 4?

Заранее спасибо.
С уважением, Пуховой.

Вот так вставь, и ничего переписывать не нужно.

if (!function_exists('file_put_contents')) {

function file_put_contents($n,$d) {
$f=@fopen($n,"w");
if (!$f) {
return false;
} else {
fwrite($f,$d);
fclose($f);
return true;
}
}
}
[Удален]
#6

Ну давайте посоревнуемся кто больше проверок на ошибки вставит

Progr@mmer\.
На сайте с 14.10.2007
Offline
44
#7

Самый лучший вариант - это у Бастерик'а. 100% там более ничего не нужно.

Вашей девушке не хватает романтики? Черпните её на сайте «Я Люблю Романтику» (http://iloveromantics.ru/). Романтический форум (http://forum.iloveromantics.ru/) для отдыха от нудной работы.
[Удален]
#8

ну или включи на серваке php5, если поддерживает

.htaccess

AddHandler application/x-httpd-php5 php

Спорим моя 1 строчка круче ваших 10? :D

P.S. php.net вам в помощь, - смотрите необходимую функцию и там снизу ее обсуждение с примерами кода.

Смотрим:

http://ru2.php.net/manual/en/function.file-put-contents.php

"This function is identical to calling fopen(), fwrite() and fclose() successively to write data to a file" - "Эта функция идентична последовательному вызову fopen(), fwrite() и fclose() для записи данных в файл"

А вот пример кода, как написать свою функцию file_put_contents()


<?

define('FILE_APPEND', 1);
function file_put_contents($n, $d, $flag = false) {
$mode = ($flag == FILE_APPEND || strtoupper($flag) == 'FILE_APPEND') ? 'a' : 'w';
$f = @fopen($n, $mode);
if ($f === false) {
return 0;
} else {
if (is_array($d)) $d = implode($d);
$bytes_written = fwrite($f, $d);
fclose($f);
return $bytes_written;
}
}

?>

Вам даже напрягаться не надо - тупо копи паст.

[Удален]
#9

Буээ! Ну сколько можно. Всякие константы объявлять без объяснений, миллионы проверок. Запутаете человека. Код BasterYC самый адекватный. Можно его еще упростить


if (!function_exists('file_put_contents'))
{
function file_put_contents($n,$d)
{
if ($f=@fopen($n,"w"))
{
fwrite($f,$d);
fclose($f);
return true;
}
return false;
}
}
Пуховой
На сайте с 17.11.2007
Offline
154
#10

Спасибо всем огромное :)

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий