2011-12-16 4 views
1

После большой помощи людей на этом сайте я смог получить 99% этого сценария, но он все еще не выполняется должным образом. Вот код:PHP не генерирует txt-файлы

PHP

<?php 
if(isset($_GET) && !empty($_GET['W'])){ 
    $url = md5($_GET['w']); 
    if(!is_file('/hit_counters/'.$url.'.txt')){ 
     $fh= fopen('/hit_counters/'.$url.'.txt', 'w'); 
     fwrite('1',$fh); 
     fclose($fh); 
    }else{ 
     $hits = file_get_contents('/hit_counters/'.$url.'.txt'); 
     $hits++; 
     file_put_contents('/hit_counters/'.$url.'.txt', $hits); 
    } 
} 
?> 

HTML

<form> 
<input type="txt" name="w" /> 
<input type="submit" value="Submit" /> 
</form> 

<iframe src="<?php echo $url; ?>"></iframe> 

<p><?php echo $hits; ?></p> 

почему-то, кажется, не работает. Вы можете посмотреть демо-версию здесь: http://www.colindunn.com/prints/index.php и более подробный код здесь: http://codepad.org/ZeTuj707

Посмотрев на мой сервер, он не генерирует файлы TXT вообще. Может ли это быть ограничением моего хозяина?

+0

будет лучше db? –

+0

Скорее всего. Но если я смогу заставить это работать, это будет хорошо для моих нужд. – colindunn

+1

Первый шаг: Активируйте отчет об ошибках, чтобы узнать, в чем проблема –

ответ

4

Простым решением может быть name="w" в нижнем регистре и $_GET['W'] в верхнем регистре.

Это решение не проверено!

EDIT

Чтобы устранить эту проблему в комментариях ниже свопа в FWRITE peramaters вокруг

fwrite($fh,'1'); 

http://uk3.php.net/fwrite

EDIT 2

Вы не создавая $hits переменную, которая используется позже на вашем дисплее при первом посещении сайта.

См. Ниже код, который устанавливает $hits, вставляет его в файл и оставляет для использования позже.

<?php 
if(isset($_GET) && !empty($_GET['W'])){ 
    $url = md5($_GET['w']); 
    if(!is_file('/hit_counters/'.$url.'.txt')){ 
     $fh= fopen('/hit_counters/'.$url.'.txt', 'w'); 
     $hits = 1; 
     fwrite($fh, $hits); 
     fclose($fh); 
    }else{ 
     $hits = file_get_contents('/hit_counters/'.$url.'.txt'); 
     $hits++; 
     file_put_contents('/hit_counters/'.$url.'.txt', $hits); 
    } 
} 
?> 
+0

Это похоже на что-то. Теперь я получаю сообщение об ошибке: Warning: fwrite(): предоставленный аргумент не является допустимым ресурсом потока в [~] /prints/index.php в строке 6 – colindunn

+1

@colindunnn вы должны отменить параметры в fwrite, это первый файл ресурс получен от fopen, а затем строка http://www.php.net/manual/en/function.fwrite.php – khael

+0

Я обновил свой ответ, чтобы включить, как писать строку 'fwrite()' –

0

Это должно сработать.

if(isset($_GET) && !empty($_GET['w'])) 
{ 
    $url = md5($_GET['w']); 
    $filename = '/hit_counters/'.$url.'.txt'; 

    $hits = (int)file_get_contents($filename); 

    // if the file could not be read, $this will be false 
    if ($hits === false) $hits = 0; 

    $hits++; 

    // if the file did not exist, it will now be created with a value of 1 in it. 
    file_put_contents($filename, $hits); 
} 

То есть, если вы можете написать в каталоге /hit_counters/.

Но на самом деле вы не должны использовать этот код. Вы должны использовать базу данных. Что делать, если два пользователя (относительно) одновременно выполняют этот скрипт?

+0

Вы совершенно правы. Однако это предназначено только как доказательство концепции. Я (явно) не программист, поэтому практические вопросы вроде этого не очень важны. Большое спасибо за Вашу помощь. – colindunn

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