Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: проблема с записью fputs в файл
Форумы портала PHP.SU » » Работа с файловой системой и файлами » проблема с записью fputs в файл

Страниц (1): [1]
 

1. t0nich - 07 Ноября, 2013 - 20:08:30 - перейти к сообщению
Помогите решить заморочку, уже второй день бьюсь, форумы прочёсываю.

Понадобилось разморозить один проектик, кот. около года назад ПРЕКРАСНО РАБОТАЛ !
Теперь не работает запись в файл с помощью fputs !!!


в папке www есть 2 файла:
switch.file (в кот. и надо записать)
и файл
index.php:


<html>
<head>
<?php
$f=fopen('switch.file', 'w+');
fputs($f, $p);
fclose($f);
?>

</head>
<body>

<a href='index.php?p=1'>UP</a>
<br>
<a href='index.php?p=3'>LEFT</a>
<a href='index.php?p=4'>RIGHT</a>
<br>
<a href='index.php?p=2'>DOWN</a>
<br><br>
<a href='index.php?p=0'>STOP</a>

</body>
</html>


Запись в 'switch.file' не происжодит, файл становиться нулевой длины.
если 'switch.file' нет, то при клике на ссылку он создастся, но будет нулевой длины.

Ошибок (error_reporting = E_ALL ; & ~E_NOTICE) не выдаёт.

атрибутов hiden/readnoly нету на файлах.
.htaccess файлов нету

Пробовал winXP x86
пробовал win7 x64
пробовал 2010-11-07_Denwer3_Base_PHP5.2_a 2.2.4_p5.2.12_zendoptimizer_m5.1 .40_pma3.2.3
пробовал shttp3.05.93


Подсобите советом, а то уже с ума схожу !!!!
2. teddy - 07 Ноября, 2013 - 20:45:23 - перейти к сообщению
t0nich пишет:
$f=fopen('switch.file', 'w+');
fputs($f, $p);
fclose($f);

в fputs вы передали дескриптор файла в который нужно сделать запись а что записывать не передали... тоесть ваша вторая переменная которая должна отвечать за текст, записываемый в файл, не определена.
3. t0nich - 07 Ноября, 2013 - 20:49:45 - перейти к сообщению
это только первый раз, а потом ведь при клике на ссылки
"index.php?p=1"

'p' передаётся, да и раньше то именно этот скриптик работал!
4. teddy - 07 Ноября, 2013 - 20:53:25 - перейти к сообщению
t0nich пишет:
'p' передаётся, да и раньше то именно этот скриптик работал!

как передается? покажите.
этот ваш "index.php?p=1" есть $_GET параметр.

напишите так:
PHP:
скопировать код в буфер обмена
  1. if(isset($_GET['p'])){
  2. $p = $_GET['p'];
  3. $f=fopen('switch.file', 'w+');
  4. fputs($f, $p);
  5. fclose($f);
  6. }

Когда параметр передатите, как выше(index.php?p=1), запишется единичка в файл или другие данные, которые вы туда введете.
5. t0nich - 07 Ноября, 2013 - 21:33:33 - перейти к сообщению
Работает! Вы мой спаситель!

Но честно говоря пока не понял, если есть возможность поясните, плиз.


teddy пишет:
Когда параметр передатите, как выше(index.php?p=1), запишется единичка в файл или другие данные, которые вы туда введете.


так не записывается же так в файл?

и главное, каким образом раньше то работало ?!

и значит при
index.php?p=1
значение 'p' не должно передаваться после самой загрузки по линку ?
?
6. teddy - 07 Ноября, 2013 - 21:43:53 - перейти к сообщению
t0nich пишет:
Вы мой спаситель!

Ха-ха пустяки))

Ну смотрите, вы пишите fputs($f, $p); ведь так? эти две переменные должны содержать в себе: Первая, указатель на файл, в который должна быть записана информация, а вторая переменная $p это сама информация. Так вот, переменной $f вы присвоили тот самый указатель на файл $f=fopen('switch.file', 'w+');

а переменной $p у вас не было, соответственно записываться было нечему, поэтому файл и был пустым. А то что вы пишите в адресной строке index.php?p=1 - это вы передаете $_GET параметр(то, что идет после знака вопроса)
тоесть ?p=1 автоматически становится $_GET['p'] а единичка становится значением этого самого $_GET['p']

Вот я и написал, если был $_GET['p'](если в адресной строке вы набрали то что написали выше), тогда "уложи" его значение(в данном случае значением является единица) в переменную $p, которую "используй" в качестве информации, которая должна быть записана в файл, который передан в функцию fputs первым параметром Ха-ха - логика скрипта...
(Добавление)
t0nich пишет:
значение 'p' не должно передаваться после самой загрузки по линку ?

если значение p не будет передано, в файл ничего не запишется
7. t0nich - 07 Ноября, 2013 - 22:05:38 - перейти к сообщению
Спасибо! Теперь понятно.

Но вот что НЕ понятно, так это как же, чёрт возьми, это раньше могло срабатывать ???
я уверен, что именно такой скрипт работал.
8. teddy - 07 Ноября, 2013 - 22:49:44 - перейти к сообщению
t0nich пишет:
я уверен, что именно такой скрипт работал.

Вы путаете Улыбка что то мне подсказывает, что вы копируя код упустили переменную, которая отвечала за добавляемую информацию...

Либо где то ещё лежал рабочий скрипт(другой файл) и запись проходила через него а не через этот... тут просто напросто нечему было записываться и всё Улыбка
9. t0nich - 07 Ноября, 2013 - 23:47:38 - перейти к сообщению
а если на Линуксе, не могло ?
в том то и дело, что архив есть, из него и брал не первый раз всю цепочку рабочую однажды налаженную.

вообще я упростил для вопроса, а оригинал вот какой был:

<html>
<head>

<?php
$f=fopen('switch.file', 'w+');
fputs($f, $p);
fclose($f);
?>


<script>
function myFunction()
{

if(event.keyCode==37){
window.location = 'index.php?p=3'; <!--left-->
}

if(event.keyCode==38){
window.location = 'index.php?p=1'; <!--up/forward-->
}

if(event.keyCode==39){
window.location = 'index.php?p=4'; <!--down/backward-->
}

if(event.keyCode==40){
window.location = 'index.php?p=2'; <!--right-->
}

if(event.keyCode==32){
window.location = 'index.php?p=0'; <!--stop-->
}

}

</script>
<noscript>can't use java</noscript>
</head>

<body onkeydown="myFunction()">

<p><font size=4>click on links below or use cursor keys & space bar</f></p>
<br>
<font size=14><b>

&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp
<a href='index.php?p=1'>UP</a>

<br>
<a href='index.php?p=3'>LEFT</a>

&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp
<a href='index.php?p=4'>RIGHT</a>

<br>
&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp
<a href='index.php?p=2'>DOWN</a>

<br><br>
&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp
<a href='index.php?p=0'>STOP</a>

</b></font>


</body>
</html>
10. teddy - 07 Ноября, 2013 - 23:51:15 - перейти к сообщению
t0nich пишет:
а если на Линуксе, не могло ?

Не думаю что Линукс автоматически понимает какую переменную php создать и в какую функцию её подставить)) Соответственно нет...

Посмотрите ещё раз хоть на винде хоть на линуксе ваш оригинал, в файл ничего не будет записано т.к не определено что именно должно записываться как я уже говорил выше

Скорее всего вы что то путаете...
11. t0nich - 08 Ноября, 2013 - 00:34:11 - перейти к сообщению
В любом случае, спасибо за обстоятельные пояснения.
Теперь всё что нужно работает!

 

Powered by ExBB FM 1.0 RC1