FlyMake with PHP. == On Windows == I use this code to let flymake-mode work with my php modules, on Windows.
(defvar phpwin-php.exe-location "c:\\Progra~2\\PHP\\v5.3\\php.exe"
  "Location for the PHP.exe executable on windows.")

(defun phpwin-flymake-create-temp-intemp (file-name prefix)
  "Return file name in temporary directory for checking FILE-NAME.
    This is a replacement for `flymake-create-temp-inplace'. The
    difference is that it gives a file name in
    `temporary-file-directory' instead of the same directory as
    FILE-NAME.

    For the use of PREFIX see that function.

    This won't always work; it will fail if the source module
    refers to relative paths.
    "
  (unless (stringp file-name)
    (error "Invalid file-name"))
  (or prefix
      (setq prefix "flymake"))
  (let* ((name (concat
                (file-name-nondirectory
                 (file-name-sans-extension file-name))
                "_" prefix))
         (ext  (concat "." (file-name-extension file-name)))
         (temp-name (make-temp-file name nil ext))
         )
    (flymake-log 3 "create-temp-intemp: file=%s temp=%s" file-name temp-name)
    temp-name))


(defun phpwin-flymake-get-cmdline  (source base-dir)
  "Gets the cmd line for running a flymake session in a PHP buffer.
    This gets called by flymake itself."
  (list phpwin-php.exe-location (list "-f" source  "-l")))


(defun phpwin-flymake-init ()
  "initialize flymake for php"
  (let ((create-temp-f 'phpwin-flymake-create-temp-intemp)
        ;;(create-temp-f 'flymake-create-temp-inplace)
        (use-relative-base-dir t)
        (use-relative-source t)
        (get-cmdline-f 'phpwin-flymake-get-cmdline)
        args
        temp-source-file-name)

    (setq temp-source-file-name (flymake-init-create-temp-buffer-copy create-temp-f)

          args (flymake-get-syntax-check-program-args
                temp-source-file-name "."
                use-relative-base-dir use-relative-source
                get-cmdline-f))
    args))


(defun phpwin-flymake-cleanup () )

(eval-after-load "flymake"
  '(progn

     ;; add an entry for PHP to the flymake-allowed-file-name-masks,
     ;; or modify the existing entry.
     (let* ((key "\\.php\\'")
            (phpentry (assoc key flymake-allowed-file-name-masks)))
       (if phpentry
           (setcdr phpentry '(phpwin-flymake-init phpwin-flymake-cleanup))
         (add-to-list
          'flymake-allowed-file-name-masks
          (list key 'phpwin-flymake-init 'phpwin-flymake-cleanup))))))

== On Windows with PHP CodeSniffer == If you like the idea of flymake for syntax checking of PHP, but want something more rigorous than just running PHP.exe on the module, consider [http://pear.php.net/package/PHP_CodeSniffer PHP CodeSniffer]. It performs static analysis on PHP modules, and can check things like whitespace, indenting, curly brace placement, the presence and format of comments, the use of double-quotes, and many more items. To do it, download !CodeSniffer (free). Then configure emacs to use !CodeSniffer for php/flymake using Lisp:flyphpcs.el. http://i.imgur.com/bkBu0.png As you can see it works nicely with FlymakeCursor . It also works well with [[RFringe]] (not shown here). == Related Links == * [http://sachachua.com/wp/2008/07/emacs-and-php-on-the-fly-syntax-checking-with-flymake/ PHP syntax checking for Flymake] * [http://www.illusori.co.uk/perl/2011/07/25/perl_php_static_analysis_with_emacs_flymake.html Perl and PHP continuous static analysis with Emacs Flymake] --- A guide to getting PHP_!CodeSniffer and/or Perl::Critic hooked up to FlyMake to take you beyond just simple syntax checking. ---- CategoryProgrammerUtils CategoryFlymake