16956


独自のいいねボタンをajaxを使って実装しようと思っています。

jQueryとPHPを使っています。

ただ、flock()のところでエラーが表示されボタンを押してもうまく実行できません。

[code]

    //clickCount.js
    $(function(){
    
         $('.letsVote').on('click' , function(){
    
              $this = $(this);
              var id = $this.data("id"); //識別用ID（重複NG）
              var numHtml = "." + $this.data("numhtml"); //カウント数を表示するHTML
              var nowCount = Number($(numHtml).html()); //現在のカウント数
              var newCount = nowCount + 1;
    
              $.ajax({
                   type : "POST",
                   url : "vote.php",
                   data: {
                        "file_id" : id,
                        "count" : newCount
                   }
              }).done(function(data , datatype){
                        //送信先のvote.phpから、Completeが返ってきたらカウント更新
                        if(data == "Complete"){
                             $(numHtml).html(newCount);
                        }else{
                             console.log(data);
                        }
                   }).fail(function(XMLHttpRequest, textStatus, errorThrown) {
                          $("#XMLHttpRequest").html("XMLHttpRequest : " + XMLHttpRequest.status);
                          $("#textStatus").html("textStatus : " + textStatus);
                          $("#errorThrown").html("errorThrown : " + errorThrown.message);
                      });
    　　　　});
    });
    
[/code]

上記の記述がjQueryのファイルです。  
続いて、

[code]

        <?php 
    //vote.php
    
    //////ajaxデータを受信1
    $file_id = $_POST["file_id"]; //ファイル名
    $count = $_POST["count"]; //投票数
    $cookieName = "vote_" . $file_id; //クッキー名。
    $cookieTime = time() + 10; //クッキーの有効期限（投票を制限する秒数）
    
    ///////クッキーが有効
    if(isset($_COOKIE[$cookieName])){
         echo "クッキー制御により投票不可です。";
    
    }else{
    ///////クッキーが無効＝カウントアップ
         $count = $_POST["count"]; //投票数
    
         //カウント数を書き出すファイル名
         $fileName = "log/" . $file_id . ".count";
    
         $fp = @fopen($fileName , "w"); //書き込みモードで開く
    
         flock($fp , LOCK_EX); //排他的ロック(書く準備) 他のロックをすべてブロック
         fputs($fp , $count); //カウント数を書き込み
         flock($fp , LOCK_UN); //ロック開放
         fclose($fp);
    
         setcookie($cookieName , $count , $cookieTime); //10秒有効のクッキーをセット
    
         echo "Complete"; //clickCount.jsにはここの値を返す
    }
    ?>
    
[/code]

上記の記述は、ajaxを使って投票数を取得しているphpファイルです。

これでclass名が.letVoteというボタンをクリックすると、

[code]

        <br />
    <b>Warning</b>:  flock() expects parameter 1 to be resource, boolean given in <b>/Applications/XAMPP/xamppfiles/htdocs/vote/vote.php</b> on line <b>23</b><br />
    <br />
    <b>Warning</b>:  fputs() expects parameter 1 to be resource, boolean given in <b>/Applications/XAMPP/xamppfiles/htdocs/vote/vote.php</b> on line <b>24</b><br />
    <br />
    <b>Warning</b>:  flock() expects parameter 1 to be resource, boolean given in <b>/Applications/XAMPP/xamppfiles/htdocs/vote/vote.php</b> on line <b>25</b><br />
    <br />
    <b>Warning</b>:  fclose() expects parameter 1 to be resource, boolean given in <b>/Applications/XAMPP/xamppfiles/htdocs/vote/vote.php</b> on line <b>26</b><br />
    Complete
    
[/code]

と表示されます。

正直どこをどう書き換えたら良いか分からず困っています。  
よろしくお願いします。


CC BY-SA 3.0
2015-09-26T09:45:46.653
16953
2015-09-26T11:12:10.580
8415
question
php jquery
jQueryとphpの連携がうまくいかない


fopen()の戻り値($fp)がFALSEになってませんか？  
fopen()は戻り値をチェックしエラー処理をきちんと書きましょう。


CC BY-SA 3.0
2015-09-26T10:05:04.050
16954
2015-09-26T10:05:04.050
7343
16953
answer


以下の点を確認してください。

  1. logフォルダはありますか？
  2. logフォルダは(httpdの権限でも)書き込み可能になっていますか？


CC BY-SA 3.0
2015-09-26T11:12:10.580
16956
2015-09-26T11:12:10.580
6092
16953
answer