Re: Failed to write to a text file (text file is RW) [message #171428 is a reply to message #171427] |
Mon, 03 January 2011 02:13 |
justaguy
Messages: 16 Registered: December 2010
Karma:
|
Junior Member |
|
|
On Jan 2, 8:34 pm, Jerry Stuckle <jstuck...@attglobal.net> wrote:
> On 1/2/2011 8:04 PM, justaguy wrote:
>
>
>
>> On Jan 2, 6:55 pm, Jerry Stuckle<jstuck...@attglobal.net> wrote:
>>> On 1/2/2011 6:26 PM, justaguy wrote:
>
>>>> On Jan 2, 5:00 pm, Denis McMahon<denis.m.f.mcma...@googlemail.com>
>>>> wrote:
>>>> > On 02/01/11 20:19, justaguy wrote:
>
>>>> >> I dig up the following script. Added a simple HTML file with a form
>>>> >> field named "vote" and have it send to the following php script.
>>>> >> However, it failed to write to the poll_result.txt file. Why?
>
>>>> > The following seems to work for me.
>
>>>> > <?php
>>>> > $filename = "poll_result.txt";
>>>> > if (isset($_POST['vote'])) {
>>>> > $vote = intval($_POST['vote']); // get this vote
>>>> > $content = file($filename); // read result file
>>>> > $array = explode("||", $content[0]);
>>>> > $yes = intval($array[0]); // get stored results
>>>> > $no = intval($array[1]);
>>>> > if ($vote == 1) $yes++; // increment one
>>>> > if ($vote == 0) $no++;
>>>> > $insertvote = $yes."||".$no; // new result string
>>>> > }
>>>> > else {
>>>> > $insertvote = "0||0\n"; // reset result string
>>>> > $yes = 0;
>>>> > $no = 0;
>>>> > }
>>>> > $fp = fopen($filename,"w"); // store results
>>>> > fputs($fp,$insertvote);
>>>> > fclose($fp);
>>>> > echo<<<EOT
>>>> > <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
>>>> > "http://www.w3.org/TR/html4/strict.dtd">
>>>> > <html>
>>>> > <head>
>>>> > <title>Yes-No Poll</title>
>>>> > </head>
>>>> > <body style="padding:1em 3em">
>>>> > <form method="post" action="quickpoll.php" name="f1" id="f1">
>>>> > <p>Yes:<input type="radio" name="vote" id="v1_1" value="1"><br>
>>>> > No:<input type="radio" name="vote" id="v1_0" value="0"><br>
>>>> > <input type="submit" value="Vote Now" name="s1" id="s1"></p>
>>>> > </form>
>>>> > <p>The results so far:<br>
>>>> > Yes: $yes votes<br>
>>>> > No: $no votes</p>
>>>> > </body>
>>>> > </html>
>>>> > EOT;
>>>> > ?>
>
>>>> > Rgds
>
>>>> > Denis McMahon
>
>>>> Denis,
>
>>>> I still failed to write to the poll_result.txt file and I noticed
>>>> there's a slight difference between this file's access attributes
>>>> compared to a similar target text file with a similar script and
>>>> process. The other target text file has rwxrwxrwx attributes while
>>>> this one has rwrwrw attributes. I thought the global writable would
>>>> suffice but it seems I was incorrect. My ftp client failed to do
>>>> chmod 755 to the global x (execute) attribute to the file.
>
>>>> Thanks though.
>
>>>> Don
>
>>> You do not need execute privileges to write the file - in fact, you
>>> should NOT have it - the file is not an executable. You also definitely
>>> should NOT have global write (or read) privileges.
>
>>> Did you check the return value from fopen()? ALWAYS check it to ensure
>>> that the file opened correctly. Also, do you know if the fread() and/or
>>> fwrite() worked correctly? You never check to see.
>
>>> --
>>> ==================
>>> Remove the "x" from my email address
>>> Jerry Stuckle
>>> JDS Computer Training Corp.
>>> jstuck...@attglobal.net
>>> ==================
>
>> Jerry,
>
>> Here's the block of code with debugging info and it still has a
>> problem:
>> //insert votes to txt file
>> $insertvote = $yes."||".$no;
>> $fp = fopen($filename,"w");
>> echo "fp;";
>> echo $fp;
>
>> fputs($fp,$insertvote);
>> echo "insert; ";
>> echo $insertvote;
>> fclose($fp);
>
>> And here's its output:
>> 10 fp;insert; 1||0
>
>> Which seems to suggest the operation of $fp = fopen($filename,"w")
>> failed.
>
>> // the poll_result.txt file is in the same directory
>> $filename = "poll_result.txt";
>
>> /* why ok with another php script?
>> Why a similar statement for file read in another script is ok.
>> $myFile = "someLog.txt";
>> */
>
>> And yes, I know the 'x' bit isn't necessary. Odd. Thanks.
>
> I'm not talking about 'debug code' - I'm talking about actual code you
> should have in every script - error checking.
>
> NEVER assume an external operation works. You should ALWAYS check the
> return code, especially where external operations are concerned, and if
> you get a bad one, you should take correct action.
>
> fopen() returns false if the file was not opened. So your current
> example should have checked for a failure in fopen and taken the
> appropriate action. For testing purposes, displaying a message would be
> sufficient. You would not want to do that on a production server, of
> course, but you should at least log the error.
>
> Had you had such code in place, you would have known that the fopen()
> failed and could have followed down why. And if this is your
> development server, you should have in your php.ini:
>
> display_errors=on
> error_reporting=E_ALL (or E_ALL | E_STRICT)
>
> These would have given you additional messages. But you don't want these
> on a production server; instead you should log your PHP errors to a file
> and look at that file when you have problems.
>
> --
> ==================
> Remove the "x" from my email address
> Jerry Stuckle
> JDS Computer Training Corp.
> jstuck...@attglobal.net
> ==================
Jerry,
The code isn't working, so, of course it's not in production. I'm
using an ISP's server, don't have a lot of control...
yes, you're right, I was lazy in error detection/tracking for this
piece of code, thought it should be fairly straight-forward.
Thanks.
Don
|
|
|