php / apache: aktiver download, seite lädt ewig

LoOni3r

Active member
25 Februar 2014
40
0
hi,


bei einem aktivem download via header lädt die Seite solange bis der Download abgeschlossen ist.
Subdomains können während dem Download aufgerufen werden, liegt also immer nur an der Domain bei dem der Download ausgeführt wurde.

vermutlich nur eine Einstellung in der php.ini.
Weiß zufällig jemand welche Einstellung das wäre?

danke
 
Guten Tag,

dachte dass das Problem allgemein bekannt wäre.

Hier mal mein Script, vill. kann mir damit jemand nen kleinen Denkanstoß geben.

PHP:
$remoteport = $_SERVER[REMOTE_PORT];
$downloaddatei = "/download/verzeichnis".$_GET[dldatei];
$filename = preg_replace ("#.*[/]#","",$downloaddatei);
$downloadinfo = fopen("/var/www/.../dl/$user_username:Download=$remoteport}$filename","w+");
header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename="'.basename($filename).'"');
header('Expires: 0');
header('Cache-Control: must-revalidate');
header('Pragma: public');
header('Content-Length: ' . filesize($downloaddatei));
readfile($downloaddatei);

Der php Code lief unter Debian 7 problemlos, erst mit Debian 8 gibt es solche probleme und ich komm leider nicht dahinter woran es liegt.

Die php.ini ist standard, habe auch keine Verwaltungstools (wie plesk o.ä.) auf dem Root installiert.

edit:\\ fast standard, habe nur "output_buffering = 128000" geändert.
 
ah ok vielen dank.
Da hab ich nicht weit genug gedacht.

Laut wiki von apache.org können gleichzeitig 256 anfragen bearbeitet werden, bei mehreren anfragen muss man das erhören.

So viele Anfragen habe ich bei mir im Download bereich vielleicht in der Woche..
hab dennoch wie auf deiner verlinkten seite

Code:
<IfModule mpm_worker_module>
    ServerLimit          40
    StartServers          2
    MaxClients          1000
    MinSpareThreads      25
    MaxSpareThreads      75 
    ThreadsPerChild      25
    MaxRequestsPerChild   0
</IfModule>

eingefügt und auch mit den werten rumgespielt.
Bleibt aber immer gleich. nur eine Anfrage pro Browser.

mit "a2enmod mpm_worker" bekomm ich:
ERROR: Module mpm_prefork is enabled - cannot proceed due to conflicts. It needs to be disabled first!

Laut google: "a2dismod mpm_prefork > a2enmod mpm_worker > service apache2 restart"
Error: Job for apache2.service failed. See 'systemctl status apache2.service' and 'journalctl -xn' for details.

also erstmal wieder a2dismod mpm_worker > a2dismod mpm_prefork > service apache2 restart
start ok.

danach in /etc/apache2/mods-enabled/mpm_prefork.conf
Code:
<IfModule mpm_prefork_module>
	StartServers			 5
	MinSpareServers		  5
	MaxSpareServers		 10
	MaxRequestWorkers	  150
	MaxConnectionsPerChild   0
</IfModule>

werte geändert und testweise MaxClients 1000 hinzugefügt.
nach Restart apache keine änderung.
Noch immer max. 1 zugriff pro Browser.


Ich google noch weiter.
Muss dazu sagen das ich mich mit der Konfig von Apache nicht so auskenne, da ich bisher super mit den Standardwerten zurecht gekommen bin.
 
Guten abend,

ja nutze ich aber nur eine für die Wiedererkennung:
PHP:
// Session_ID erstellen
session_unset();
session_destroy();
session_set_cookie_params(60*60*24*500, '/', '.brotty.de');
session_name("Brotty");
session_id($key);
session_start();
$session_id = session_id();
// Session_ID erstellen ende

echo "Login erfolgt..";

PHP:
// Session auslesen
session_set_cookie_params(0, '/', '.brotty.de');
session_name("Brotty");
session_start();
$session_id = session_id();
// Session auslesen ende

dein link bringt mich leider nicht weiter, ich kann "MaxClients" beliebige werte eingeben ohne das sich etwas ändert :/
 
MaxClients hat eher nichts damit zu tun.
pack mal ein session_write_close() unter das "session auslesen" auf der download-page.

abgesehen davon ist es höchst fahrlässig, userinput unvalidiert weiterzuverarbeiten. mit deinem unten geposteten script kann man auf beliebige dateien auf deinem server zugreifen.
Ich hoffe, dass du das nur lokal zu testzwecken und nicht irgendwo auf einem mit dem internet verbundenen server einsetzt.
 
ah super vielen dank.

mit "session_write_close();" funktionierts nun.
Hätte nicht gedacht das es daran liegt.

Was genau meinst du mit "auf beliebige dateien auf deinem server zugreifen", bzw. wie würde das gehen und wie könnte ich das am besten verhindern?