Login | Packages | Support | Bugs 

Package home | Report new bug | New search Status: Open | Feedback | All

Bug #12314 APC_FETCH returns false (Suhosin + apc.rfc1867)
Submitted: 2007-10-23 18:44 UTC Modified: 2009-05-05 18:48 UTC
From: stefan dot rutenkolk at freenet dot de Assigned:
Status: No Feedback Package: APC
Version: 5.2.0 OS: openSUSE 10.2 (X86-64)
[2007-10-23 18:44 UTC] stefan dot rutenkolk at freenet dot de
Description:
------------
I developed a progress bar and it works fine on my windows XP system:
  Apache/2.0.55
  PHP 5.2.3
  APC 3.0.15-dev, 
but on the server 
  openSUSE 10.2 (X86-64)
  kernel-version: 2.6.18.8-0.5-default
  Apache/2.2.6 (Linux/SUSE)
  PHP 5.2.0
  APC 3.0.15
it gets false always.
The apc.rfc1867 is true and all other settings having the same values as
on my windows system.

Reproduce code:
---------------
<?php
if(isset($_GET['progress_key'])) {
  $status = apc_fetch('upload_'.$_GET['progress_key']);
  echo json_encode($status);
  exit;
}
?>

Expected result:
----------------
{"total":xxxxx,"current":yyyyy,
"filename":"filename.ext",
"name":"thefile",
"done":0,
"start_time":zzzzz}

Actual result:
--------------
false
[2007-10-24 09:59 UTC] stefan dot rutenkolk at freenet dot de
I updated the PHP-Version to 5.2.4,
but the problem exists further.
[2007-10-28 16:14 UTC] gopalv
Are you using FastCGI?
[2007-10-29 09:51 UTC] stefan dot rutenkolk at freenet dot de
No, I don't use FastCGI.
[2007-11-04 02:43 UTC] pedrofuentes at gmail dot com
i have the same problem on a debian etch, php 5.2.0, apache 2.0, APC
3.0.15

i upload a file, it tells false, but when the upload finish i can view
de data, i search for the apc.xxxxxx in the tmp directory but nothing is
created, i chech with the apc.php file and it seems that all is ok.
[2007-11-05 19:16 UTC] frank dot burian at gmail dot com
Hey,

i have the same problem. i use openSUSE 10.2 and php 5.2.4!
i have installed the apc-extension via a rpm-file, and the apc extension
seems to work. after this, i test upload with progressbar and it doesn't
work. the return is also false!

have someone a solution?

thx
[2007-11-05 19:44 UTC] pedrofuentes at gmail dot com
did you see if the apc.xxxxxx file in tmp directory exists during the
upload ?
[2007-11-06 07:17 UTC] frank dot burian at gmail dot com
Hey. I didn't see the apc.xxxxxx file during the upload! Why is this so?
Have someone a idea to solve this problem? thx
[2007-11-07 12:49 UTC] stefan dot rutenkolk at freenet dot de
Frank has found a workaround.

The problem is solved, if you deaktivate the 'suhosin-patch'!

Comment the extension=suhosin.so in the /etc/php5/conf.d/suhosin.ini
File out or move the suhosin.ini file to a directory which is not
added.

Thanks Frank.
[2007-11-07 15:04 UTC] gopalv
Closed as Bogus
[2007-12-06 09:14 UTC] gianiaz at gianiaz dot net
i have the same problem. i use openSUSE 10.2 and php 5.2.4!

I don't have the subhosin extension, but I receive always false.

On another server(ubuntu php 5.3.2) the same piece of code works. 

php.ini settings are the same...
[2009-03-02 13:55 UTC] wamccarthy at bedmas dot com
I have Ubuntu 8.4 installed. I installed the apc extension and
everything seems to work perfectly but apc_fetch returns false. I see
that "gianiaz at gianiaz dot net" has it working with Ubuntu. Which
version of Ubuntu are you using? I hope my problem is something simple
as I am spending way to much time working on this one.

Thanks,
Bill
[2009-03-02 19:31 UTC] shire at php dot net
Can you re-post your reproduction script including your HTML post form
you're using.  Can you send us your 'php -m' output as well as which
version of APC you're using?  I'd like you to try the latest APC CVS
version as well as there's a fix for RFC1867 that could cause unexpected
behavior on different platforms.
[2009-03-03 08:26 UTC] stefan dot rutenkolk at freenet dot de
hey,
here is my JavascriptSnippet (i use the twobird lib):
first:
function callUpload(_progress_key) {
  progress_key = _progress_key;
  //alert('progressKey: '+progress_key);
  tb.request.add( ajaxCallback, 'GET', '/src/common/progress.php',
'progress_key='+_progress_key, false);
}
callback:
function ajaxCallback( pXml, pText ) {
		if (pText!="") {		
			var resp = eval('(' + pText + ')');
			var rDone = resp['done'];
			//alert('pText: '+pText+ ' pXml: '+pXml+' resp: '+rDone);
			var txt = '';
			if (!resp['done']) { 
			    if(resp['total']) {
			      pct = parseInt(100*(resp['current']/resp['total']));
			      txt = pct+'% '+resp['current']+" von "+resp['total']+" bytes";
				  if (pct==100) {
			      	txt = txt+ " - bitte warten, Datei wird geprüft -";
				  }
				}
				setTimeout("checkUpload()",500);
			} else {
			    txt=resp['total']+" bytes uploaded!";
			    g_uploadCanceled='true';
			}
			document.orderForm.uplOutput.value='';
			document.orderForm.uplOutput.value=txt;
			if (pct!='') {
				document.getElementById("ladebalken").style.width = pct;
				document.getElementById("ladebalken").style.backgroundColor =
'#000000';
			}
		} else {
			setTimeout("checkUpload()",500);
		}
}

+++++++++++++++++

APC Support 	enabled
Version 	3.0.19
MMAP Support 	Enabled
MMAP File Mask 	no value
Locking type 	pthread mutex Locks
Revision 	$Revision: 3.154.2.5 $
Build Date 	Oct 8 2008 20:34:02
[2009-03-03 20:00 UTC] shire at php dot net
Was hoping for more HTML and PHP, less javascript ;-).  Bascially I
wanted to know what your HTML form elements where that's doing the
original upload.  Can you paste your APC rfc1867 settings as well.

Have you had a chance to try the CVS version of APC?
[2009-03-04 07:38 UTC] stefan dot rutenkolk at freenet dot de
ok,

rfc1867 must be on
here the other settings:

Directive	Local Value	Master Value
apc.cache_by_default	On	On
apc.coredump_unmap	Off	Off
apc.enable_cli	Off	Off
apc.enabled	On	On
apc.file_update_protection	2	2
apc.filters	no value	no value
apc.gc_ttl	3600	3600
apc.include_once_override	Off	Off
apc.max_file_size	1M	1M
apc.mmap_file_mask	no value	no value
apc.num_files_hint	1000	1000
apc.report_autofilter	Off	Off
apc.rfc1867	On	On
apc.rfc1867_freq	0	0
apc.rfc1867_name	APC_UPLOAD_PROGRESS	APC_UPLOAD_PROGRESS
apc.rfc1867_prefix	upload_	upload_
apc.shm_segments	1	1
apc.shm_size	30	30
apc.slam_defense	0	0
apc.stat	On	On
apc.stat_ctime	Off	Off
apc.ttl	0	0
apc.user_entries_hint	4096	4096
apc.user_ttl	0	0
apc.write_lock	On	On

+++++++++++++++++++++++++++++++++++++++++++
HTML:

<form enctype="multipart/form-data" name="uploadForm" method="post"
action="./Contr.php?PHPSESSID=<smarty:php/>echo
session_id();<smarty:/php/>">
<input type="hidden" name="APC_UPLOAD_PROGRESS" id="progress_key"
value="<smarty:php/>echo time();<smarty:/php/>"/>
<input name="thefile" type="file">

++++++++++++++++++++++++++++++++++++++++
progress.php:

<?php /* getprogress.php */
if(isset($_GET['progress_key'])) {
  $status = apc_fetch('upload_'.$_GET['progress_key']);
  echo json_encode($status);
  exit;
}
?>

+++++++++++++++++++++++++++++++++++++++++

sorry, cannot try any other version, because i am the programmer not the
sysAdmin.

Good luck.
[2009-03-04 22:11 UTC] shire at php dot net
There is a file called apc.php included in the source code that lets
your browse the APC cache.  Can you use this to browse your user cache
and validate that you don't have any entries with the rfc1867 prefix
you've used?

If this turns out to be a problem with APC then we're likely limited
with what we can do to fix your bug as I won't be able to get any
validation that it's fixed if you can't upgrade and I can't currently
reproduce, although it seems likely that this may be a problem with the
code, I would try simplifying your test case to a simple reproduction
with a constant key suffix etc.
[2009-04-05 15:21 UTC] dannt at toasterbridge dot com
Hi guys.

It seems I have the same problem here with Debian-lenny:
I installed apache2.2.11 + php 5.2.9 + latest stable APC.
Then copied working code from my freeBSD server to work on it at my
local machine: it doesn't work.

The same code is works well at freeBSD machine but doesn't work on my
one. I spotted apc_fetch does return false instead of array.

Any ideas? thanks
[2009-04-05 15:27 UTC] dannt at toasterbridge dot com
Guys I'm sorry for disturbing you: I have fixed this.

I'd like to post the solution for further problem requests. Not sure
what exactly caused the problem but I have changed this one:

--------------------------------------------
apc.rfc1867 = on

[APC]
;specifies the size for each shared memory segment 8MB to start
apc.shm_size=8
;max amount of memory a script can occupy
apc.max_file_size=1M
apc.ttl=0
apc.gc_ttl=3600
; means we are always atomically editing the files
apc.file_update_protection=0
apc.enabled=1
apc.enable_cli=0
apc.cache_by_default=1
apc.include_once_override=0
apc.localcache=0
apc.localcache.size=512
apc.num_files_hint=1000
apc.report_autofilter=0
apc.rfc1867=0
apc.slam_defense=0
apc.stat=1
apc.stat_ctime=0
apc.ttl=7200
apc.user_entries_hint=4096
apc.user_ttl=7200
apc.write_lock=1
--------------------------------------------

with the following:

--------------------------------------------
[APC]
apc.rfc1867 = on
extension=apc.so
apc.enabled=1
apc.shm_segments=1
apc.shm_size=128
apc.ttl=7200
apc.user_ttl=7200
apc.num_files_hint=1024
apc.mmap_file_mask=/tmp/apc.XXXXXX
apc.enable_cli=1
--------------------------------------------

And now it works brilliant!
I hope this will help.

Cheers, Danny.
[2009-04-06 02:57 UTC] shire at php dot net
dannt: Just wanted to confirm if you could verify if this a problem on
the latest CVS (not latest stable).  You have posted a number of INI
changes, is there one specific INI configuration that you changed that
changed this behavior?
[2009-05-05 18:48 UTC] shire at php dot net
No feedback was provided. The bug is being suspended because
we assume that you are no longer experiencing the problem.
If this is not the case and you are able to provide the
information that was requested earlier, please do so and
change the status of the bug back to "Open". Thank you.
[2009-05-06 08:01 UTC] toms at linuxos dot sk
Hi,

I'm experiencing the same problem as Dannt. I'm using debian-lenny amd64
+ apache + php5/fastcgi and apc_fetch keeps returning false. I've tried
using both apc versions - from debian repositary (package php-apc) and
also stable version from pecl. Online demo on debian server can be found
at http://dev.srnka.info/TEMP/file-upload/ . The same script working on
CentOS box with apache + mod_php can be found at
http://toms.linuxos.sk/gsoc09/file-upload/ .

You can download file-upload script from:
http://dev.srnka.info/TEMP/file-upload/upload-progress-bar.zip

My APC configuration is the same on both servers:
extension=apc.so
     apc.enabled=1
     apc.shm_segments=1
     apc.shm_size=256
     apc.ttl=7200
     apc.user_ttl=7200
     apc.num_files_hint=1024
     apc.mmap_file_mask=/tmp/apc.XXXXXX
     apc.enable_cli=1
     apc.rfc1867 = On
[2009-10-01 14:52 UTC] boudoux at nelis dot fr
Same problem here.

Using debian lenny amd64 and php5.3.0.
Always got a false response from apc_fetch.

extension=apc.so
  apc.enabled=1
  apc.shm_segments=1
  apc.shm_size=128
  apc.ttl=7200
  apc.user_ttl=7200
  apc.num_files_hint=1024
  apc.enable_cli=1

;activation pour le progress meter
  apc.rfc1867=On
  apc.rfc1867_prefix=upload_
  apc.rfc1867_name=APC_UPLOAD_PROGRESS
  apc.rfc1867_freq=300k
[2009-10-30 15:59 UTC] scriptlancer1975 at gmail dot com
I've developed a simple progress bar and it kept working so far. But
recently while I was trying to upload a comparatively larger file (say
25MB) , apc_fetch started returning false value. Small files (say 4/5
MB) still works good. I've increased apc.max_file_size to 1G (my
upload_max_filesize is also equal to 1G) and still the problem
persists.

Here is my apc settings:

[apc]
extension=apc.so
apc.enabled=1
apc.shm_segments=1
apc.shm_size=128
apc.ttl=7200
apc.user_ttl=7200
apc.num_files_hint=1024
apc.mmap_file_mask=/tmp/apc.XXXXXX
apc.enable_cli=1
apc.rfc1867 = On
apc.max_file_size = 1G

Other system config:
#uname -a
Linux www.xxxxyyyzz.com 2.6.18-128.4.1.el5 #1 SMP Tue Aug 4 20:23:34 EDT
2009 i686 athlon i386 GNU/Linux
CentOS release 5.3 (Final)

Here is the progress bar script:
<?php
header('Expires: Tue, 08 Oct 1991 00:00:00 GMT');
header('Cache-Control: no-cache, must-revalidate');

if(isset($_GET['uid'])){
   $status = apc_fetch('upload_' . $_GET['uid']);
   echo round($status['current']/$status['total']*100);
}
?>

Any idea?

Thanks
[2009-11-19 23:46 UTC] anair at land dot ru
Then i run two browsers whith script-uploader , parametr 'current' is
wrong value. Why ? can we help my?
PRIVACY POLICY | CREDITS
Copyright © 2001-2008 The PHP Group
All rights reserved.
Last updated: Fri Aug 07 10:22:05 2009 UTC
Bandwidth and hardware provided by: pair Networks