PDA

Просмотр полной версии : ограничение на запись в файл php


Дикс
04.12.2007, 15:34
Почему скрипт на холме записывает тока 4 килобайта, а остальное обрезает? =\
данные передаются через Post, а потом пишутся в файл, безо всяких ограничений. В итоге получаю файл ровно 4.096 кб

LolFEm
04.12.2007, 15:44
Код скрипта где идёт передача через _post

groundhog
04.12.2007, 15:48
Ограничение бесплатного хостинга

Дикс
04.12.2007, 16:26
вот блин. у себя на денвере запустил - попробовал запостить страницу гугла. в итоге он добавил ПОСЛЕДНИЕ 4.84 кб =\

вот код формы:

<form method="POST" name="addpostform">
<input type="text" name="title" class="textinput" />&nbsp;
<select name="cat" style="border: 1px solid black;">
<option value="0">other</option>
<option value="1">проги</option>
</select>
<textarea name="preview" id="pr"></textarea>
<textarea name="body" id="post" ></textarea></p>
<input type="submit" value="добавить пост" />
</form>

вот add.php:

<?php
if($_SERVER['REQUEST_METHOD'] == 'POST'){

if(trim($_POST['title'])!= "" && trim($_POST['body']) != ""){
if((isset($_SESSION['body']) && $_SESSION['body'] != trim($_POST['body'])) || !isset($_SESSION['body'])){
$_SESSION['body'] = trim($_POST['body']);
$txt = new txtDB();
$filename = date("H-i.d-m-y", time());

# add preview
if(isset($_POST['preview']) && (trim($_POST['preview']) != "")){
$preview = nl2br(trim($_POST['preview']));
$txt->dir("post_preview");
$txt->writeToFile($filename, $preview, "w");
$txt->dir("posts");
}
# end

$txt->dir("posts");

$txt->createFile($filename);
$data = nl2br(trim($_POST['body']));
$txt->writeToFile($filename, $data, "w");
$title = chunk_split(substr(trim($_POST['title']), 0, 60), 30, "<br />");
// $form = substr("abcdef", 1, 3); // вернет "bcd"
if($_SESSION['admin'] == "deex")
$author = 0;
else
$author = 1;

$record = date("H-i.d-m-y", time())."||".$title."||".$_POST['cat']."||".$author."\n";
$txt->writeToFile("posts.info", $record, "a");
$status = '<div style="float: left; padding-left: 20px; color: green; font-weight: bold;">Added</div>';
}else
$status = '<div style="float: left; padding-left: 20px; color: #CC0000; font-weight: bold;">Post duplicated</div>';
}else
$status = '<div style="float: left; padding-left: 20px; color: #CC0000; font-weight: bold;">All fields required</div>';
}
include("tpl/add_post.tpl.php");
?>


и последнее - это мой замучанный класс для записи в файл:

<?php
class txtDB {
var $path, $buffer, $rs, $tmp, $arr = Array();

// messages
function error($text){
echo "<p style='color: white; font-weight: bold; background-color: #FF9D9D; padding: 3px;'>".$text."</p>";
}

function done($text){
echo "<p style='color: green; background-color: #DBFFCA; padding: 3px;'>".$text."</p>";
}

// init work dir
function dir($dirname){
if(file_exists($dirname))
$this->path = $dirname."/";
else
if(mkdir($dirname))
$this->path = $dirname."/";
else
error("Can`t create directory ".$dirname);
}

function createFile($file_name, $mode="soft"){
if(file_exists($this->path.$file_name)){
if($mode != "rewrite"){
$this->error("file exists");
return 0;
}
elseif($mode == "rewrite"){
unlink($this->path.$file_name);
touch($this->path.$file_name);
return 1;
}
}else{
touch($this->path.$file_name);
return 1;
}
return 0;
}

function writeToFile($file_name, $data, $mode="a"){
$data = stripslashes($data);
if(file_exists($this->path.$file_name)){
if($mode == "w"){
if($t = fopen($this->path.$file_name, "w")){
fwrite($t, $data);
fclose($t); }
}else{
if($t = fopen($this->path.$file_name, "a"))
fwrite($t, $data);
fclose($t);
}
}else{
if($t = fopen($this->path.$file_name, "w")){
fwrite($t, $data);
fclose($t);}
}
}

function readFromFile($file_name){
if(file_exists($this->path.$file_name)){
$t = fopen($this->path.$file_name, "r");
while(!feof($t))
$this->buffer = fread($t, "4096");
return $this->buffer;
}else
$this->error($this->path.$file_name." is not exists");
return 0;
}

function dirList($dir="", $arr= array()){
if($dir != "")
$this->rs = opendir($this->path.$dir."/");
else
$this->rs = opendir($this->path);

while($this->tmp = readdir($this->rs))
if($this->tmp != "." && $this->tmp != "..")
$arr[] = $this->tmp;
closedir($this->rs);
return $arr;
}
// end of class

function dateFormat($comm){
$comm = explode(".", $comm);
$time_m = explode("-", $comm[0]);
$time = $time_m[0].":".$time_m[1];

return $time."&nbsp;".$comm[1];
}
}
?>

.:EnoT:.
04.12.2007, 16:32
и последнее - это мой замучанный класс для записи в файл:

Вот:
$this->buffer = fread($t, "4096");
У тебя ограничение стоит до 4 байтов

http://ru2.php.net/manual/ru/function.fread.php

groundhog
04.12.2007, 16:36
Хз... Попробуй fwrite на fputs поменять...

Дикс
04.12.2007, 16:55
увеличил лимит чтения.
всё работает.
на всякий случай заменил fwrite на fputs.
непонятно тока, почему на локалхосте он сохранял всё, но читал последний кусок файла, а на хосте сохранял лишь его первый кусок.