2016-04-10 5 views
-2

У меня есть следующий фрагмент кода, который работает BTW:Php FWRITE/fclose предупреждение

$txt = "<?php include 'work/uploads/".$php_id.".html';?>"; 
    $slot = file_put_contents('../offer/slots.php', $txt.PHP_EOL , FILE_APPEND); 
    fwrite($slot, $txt); 
    fclose($slot); 
    $theCounterFile = "../offer/count.txt"; 
    $oc = file_put_contents($theCounterFile, file_get_contents($theCounterFile)+1); 
    fwrite($oc); 
    fclose($oc); 

Но следующие предупреждения нужно регистрироваться при его запуске:

Line 81 : fwrite() expects parameter 1 to be resource, integer given 
Line 82 : fclose() expects parameter 1 to be resource, integer given 
Line 85 : fwrite() expects at least 2 parameters, 1 given 
Line 86 : fclose() expects parameter 1 to be resource, integer given 

Вероятно, моя логика здесь не так. Может, кто-то может пролить свет?

+1

Что такое линии 81,82,85 и 86? – FuzzyTree

+1

Это б/с, вы неправильно используете эти функции. посмотрите это в руководстве – jeremy

ответ

1

Вы не нуждаетесь в fwrite() или fclose() вообще, когда используете file_put_contents(). От the docs for file_put_contents():

Эта функция идентична вызову fopen(), fwrite() и fclose() последовательно записывать данные в файл.

Ваш код должен выглядеть следующим образом:

$file = fopen("../offer/work/uploads/".$php_id.".html","w"); 
fwrite($file,$data); // Note: you could use file_put_contents here, too... 
fclose($file); 
$txt = "<?php include 'work/uploads/".$php_id.".html';?>"; 
$slot = file_put_contents('../offer/slots.php', $txt.PHP_EOL , FILE_APPEND); 
$theCounterFile = "../offer/count.txt"; 
$oc = file_put_contents($theCounterFile, file_get_contents($theCounterFile)+1); 

А почему вы получаете ошибки с текущим кодом: fwrite() и fclose() ожидать, что первый параметр является ресурс (типа возвращаемого значения вы получите от fopen()). Но вы передаете им значение, возвращаемое file_put_contents(), которое является целым числом. Итак, вы получите сообщение об ошибке.

1

file_put_contents Управление операциями открыто, пишите и закройте все за один раз - нет необходимости звонить fwrite и fclose после этого. (Не только нет необходимости. - это даже не имеет никакого смысла, потому что с file_put_contents вы даже не имеют дескриптор файла, чтобы начать с)

file_put_contents возвращает число байтов, а целое значение - и вот почему вы получаете эти предупреждения.

Смежные вопросы