php.net |  support |  documentation |  report a bug |  advanced search |  search howto |  statistics |  random bug |  login
Bug #53374 str_replace & fwrite
Submitted: 2010-11-22 09:04 UTC Modified: 2010-11-23 18:06 UTC
From: pascalholscher at gmail dot com Assigned:
Status: Not a bug Package: *General Issues
PHP Version: Irrelevant OS: Windows
Private report: No CVE-ID: None
View Add Comment Developer Edit
Welcome! If you don't have a Git account, you can't do anything here.
You can add a comment by following this link or if you reported this bug, you can edit this bug over here.
(description)
Block user comment
Status: Assign to:
Package:
Bug Type:
Summary:
From: pascalholscher at gmail dot com
New email:
PHP Version: OS:

 

 [2010-11-22 09:04 UTC] pascalholscher at gmail dot com
Description:
------------
A bug with str_replace & fwrite

Test script:
---------------
function installNewerVersion($newversion) {
    $docroot = $_SERVER['DOCUMENT_ROOT'];

 // url naar zip (update site)
  $src = 'http://support.telsec.nl/tms_updates/'.$newversion.'.zip';
  //locatie voor het zip bestand
    $dest = $docroot.'/tmp/'.$newversion.'.zip';
    // open de locaties
    $fsrc = fopen($src,'r');
    $fdest = fopen($dest,'w+');
    // kopieƫr bestand van locatie a naar b
    $len = copy($src,$dest);
    // sluit locaties
    fclose($fsrc);
    fclose($fdest);
    $command = 'x "'.$docroot.'/tmp/'.$newversion.'.zip" -aoa -o"'.$docroot.'/tmp/" && exit';
    $programDir = $docroot."/../7za.exe";
     if(file_exists('tmp/upgrade_'.$newversion.'.php')) {
    require_once('tmp/upgrade_'.$newversion.'.php');
    }
    $filename = $_SERVER['DOCUMENT_ROOT'].'/product_version.php';
    if(!$openfile = fopen($filename, 'rb+')) {
        echo 'Kan bestand niet openen.';
    }
    $data = file_get_contents($filename);
    $data1 = str_replace('3.3.4', '3.3.5', $data);
    rewind($openfile);
    fwrite($openfile, $data1);
    fclose($openfile);
    	if(isset($_COOKIE['checked'])) {
    setcookie("checked", "", time() - 3600);
    }
    echo "<script type='text/javascript'>
alert('De update is geslaagd.');
</script>";
return $len;
}

Expected result:
----------------
Show the output/alertbox "update succes"

Actual result:
--------------
No output of echo's or alerts at all.

Extra info:

This is a function included in another file when I comment out the fwrite 
the script shows the output but doesn't write the data in the correct way.
So there are some issues with str_replace & fwrite.
I'm using php 4.4.4 as that is the version the firmware is using where we want to let users implent an auto update.

Patches

Add a Patch

Pull Requests

Add a Pull Request

History

AllCommentsChangesGit/SVN commitsRelated reports
 [2010-11-22 10:34 UTC] pascalholscher at gmail dot com
-Status: Open +Status: Closed
 [2010-11-22 10:34 UTC] pascalholscher at gmail dot com
Solved
 [2010-11-22 10:37 UTC] johannes@php.net
-Status: Closed +Status: Bogus
 [2010-11-22 10:37 UTC] johannes@php.net
Sorry, but your problem does not imply a bug in PHP itself.  For a
list of more appropriate places to ask for help using PHP, please
visit http://www.php.net/support.php as this bug system is not the
appropriate forum for asking support questions.  Due to the volume
of reports we can not explain in detail here why your report is not
a bug.  The support channels will be able to provide an explanation
for you.

Thank you for your interest in PHP.


 [2010-11-23 08:53 UTC] pascalholscher at gmail dot com
What do I need to contact to get this fixed.

It seems like a bug to me...
 [2010-11-23 10:27 UTC] aharvey@php.net
It might seem like a bug to you (and it may be one), but I think there
are a few reasons why you'd be better off going through a support
channel first:

Firstly, you yourself closed the bug report with the comment "Solved",
so that would suggest that there wasn't a bug for us to look at. :)

Secondly, PHP 4 is well past its end of life date, so unless you can
reproduce this in a current 5.3 build (5.3.3 or later), this isn't
going to be investigated further.

Thirdly, you haven't attached a minimal example -- there's quite a bit
of extra code there that doesn't appear to be relevant to the bug --
nor have you explained  how the code you've attached is misbehaving,
what error messages are displayed, and it's quite unclear to me what
the actual bug is supposed to be, beyond some sort of issue with
str_replace and/or fwrite, which could be anything.

For those reasons, I'd very strongly advise you to try seeking help
via a mailing list, or Stack Overflow, or IRC, or some combination of
the above. If, after all that, there still seems to be a bug, please
provide a minimal test case showing the problem and a clear
explanation of exactly what's wrong.
 [2010-11-23 10:38 UTC] pascalholscher at gmail dot com
Yes this is happening with php 5 also but it's not a bug it seems as:

$version = explode('.', VERSION);
$new = explode('.', $newversion);
$data1 = preg_replace('{'.$version[2].'}', '.$new[2].', $data);

$version[2] represents the old version number ending in this example a 4
$new[2] represents the new version in this example 5
The thing is when I run it the changes are made but all php errors are not displayed on the screen anymore same goes for the echo's etc.

Once I make the line like this:
$data1 = preg_replace('{'.$version[2].'}', '{'.$new[2].'}', $data);

It works but only adds some unnesecary and not planned {} to it.
 [2010-11-23 10:54 UTC] rasmus@php.net
Preg expressions start and end with a delimiter.  Using { and } have special 
meanings there.  The correct regex you want looks like this:

$data1 = preg_replace('/\{'.$version[2].'\}/', '{'.$new[2].'}', $data);

No bug here.
 [2010-11-23 11:22 UTC] pascalholscher at gmail dot com
That doesn't work like I want I will show you what I mean:

$newversion = '3.3.5';
define(VERSION, "3.3.4"); // this is the line in the included version file

$filename = $docroot.'/product_version.php';
    if(!$openfile = fopen($filename, 'rb')) {
        echo 'Kan bestand niet openen.';
    }
    $data = file_get_contents($filename);
    $version = explode('.', VERSION);
    $new = explode('.', $newversion);
    $data1 = preg_replace($version[2], $new[2], $data);
    fwrite($openfile,$data1);
    fclose($openfile);


// my expected result of data1 = making the 3.3.4 in version.php to 3.3.5 the new version but what happends is it replaces the file number what I want but it doesn't show the echo's on my screen like I want. And when I quote this function then the echo's are showing on screen.
 [2010-11-23 18:06 UTC] rasmus@php.net
Sorry, this is not a support forum.  You have clearly not read the preg 
documentation.  Once again, you have to use a delimiter character at the beginning 
and end of your expression.  When you do preg_replace($version[2] there is clearly 
no delimiter.  You would need to do preg_replace('/'.$version[2].'/' to make it 
into a valid pattern. However, for straight replacements like that, just use 
str_replace().
 
PHP Copyright © 2001-2024 The PHP Group
All rights reserved.
Last updated: Mon May 06 01:01:31 2024 UTC