You are not logged in.

  • Login

1

Friday, October 23rd 2009, 11:39am

pcntl_fork() Problem

Hallo zusammen,

habe da mal eine kleine frage.. undzwar habe ich diesen Fehler, weiss jedoch nicht wie ich es lösen könnte.

Quoted

Fatal error: Call to undefined function pcntl_fork() in /var/www/vhosts/meinedomain.de/subdomains/srv1/httpdocs/schell.php on line 15


php -m sagt mir

Quoted

stagate:~# php -m
[PHP Modules]
bcmath
bz2
calendar
ctype
curl
date
dba
dom
exif
filter
ftp
gd
gettext
hash
iconv
imap
ionCube Loader
json
libxml
mbstring
mime_magic
mysql
mysqli
ncurses
openssl
pcntl
pcre
PDO
pdo_mysql
posix
Reflection
session
shmop
SimpleXML
soap
sockets
SPL
standard
sysvmsg
sysvsem
sysvshm
tokenizer
wddx
xml
xmlreader
xmlwriter
xsl
zip
zlib

[Zend Modules]
the ionCube PHP Loader


Kann mir da vieleicht jemand helfen? Ich weiss einfach nicht mehr weiter..... Nutze Debian etch 4.0 eigendlich sollte Debian doch die pakete beinhalten oder ?

lg
Dragon

2

Friday, October 23rd 2009, 12:19pm

Die Option muss gesondert aktiviert werden:

Quoted

Prozesskontrollunterstützung in PHP ist nicht standardmäßig aktiviert. Sie müssen die CGI oder CLI Version von PHP mit der --enable-pcntl Konfigurationsoption kompilieren, um Prozesskontrollunterstützung einzuschalten.


siehe http://de3.php.net/manual/de/pcntl.installation.php

Wahrscheinlich ist das Modul zwar installiert, aber nicht aktiviert.

Vllt ist das ja hilfreich: http://ubuntuforums.org/showthread.php?t=549953

3

Friday, October 23rd 2009, 1:25pm

Hi,
wie startest du das Script überhaupt? Kommandozeile oder Webserver?
Da du die Datei im htdocs Verzeichnis ablegst könnte man vermuten du willst die Datei über den Webserver aufrufen?

Dazu muss php aber als CGI Version über Apache eingebunden sein. Das in Apache kompilierte Modul "mod_php" unterstützt es nicht.
Finde das auch absolut sinnvoll, da Threading nichts in einer Webapp zu suchen hat.

Das es unter Windows nicht funktioniert, ist dir bestimmt auch klar?

4

Friday, October 23rd 2009, 2:12pm

das es unter Windows nicht geht ist kla :)

Wie mache ich das den am besten? Habe zwar in Plesk die einstellung PHP-Unterstützung einmal als Apache Modul und einmal CGI Applikation und einmal FAST CGI Applikation aber wenn ich das umstelle z.b geht es auch nicht.

Aufrufen tuh ich das ganze derzeit noch via Webserver... sprich den link zur datei... später erledigt das ein cron für mich :)

lg
Dragon

5

Friday, October 23rd 2009, 3:48pm

Aufrufen tuh ich das ganze derzeit noch via Webserver... sprich den link zur datei... später erledigt das ein cron für mich

aus dem Grund würde ich es lieber gleich per cron machen.

Wie gesagt.. Forks sind nicht für Webserver Prozesse gedacht.

6

Friday, October 23rd 2009, 9:29pm

das geht in diesem falle nicht da es nicht mal grade ein 20 zeilen code und nicht nur eine datei ist das ganze zusammen ist ein eventhändler und deshalb wird frock da leider benötigt. da der immer weiter laufen soll usw
Und jetzt ein halbes jahr arbeit wieder von vorne zu machen möchte ich jetzt nicht erlichgesagt... vorallem nicht bei einem Problem sage ich mal..... wenn ich das gelöst habe läuft alles wieder so wie am schnürchen :)


Hier mal der link zum tutorial vom enenthändler....

http://www.browsergames24.de/modules.php…der=asc&start=0

7

Saturday, October 24th 2009, 10:22am

das geht in diesem falle nicht da es nicht mal grade ein 20 zeilen code

Und was geht jetzt daran nicht? Für den Code ist es egal ob du ihn via Webbrowser oder Cron aufrufst, nur dass du über den Webbrowser eben weniger Funktionen hast.
Im Tutorial wird es auch via Kommandozeile gestartet.

BTW: Verabschiede dich vom Wording "Eventhandler", das ist eine Game Loop.
das geht in diesem falle nicht da es nicht mal grade ein 20 zeilen code und nicht nur eine datei ist das ganze zusammen ist ein eventhändler und deshalb wird frock da leider benötigt. da der immer weiter laufen soll usw

8

Saturday, October 24th 2009, 1:56pm

ja ich führe bei mir um das ganze zu starten eine sh datei aus die dann sämtliche crons einrichtet sozusagen

install_cron.sh

Quoted

#!/bin/bash


echo "Wie Lautet der Zielpfad (Ohne '/' am Ende!):"
read cpath
echo "0 4,10,16,22 * * * php $cpath/reload_stat.php
0 0 * * * $cpath/bak/bak.sh
* * * * * php $cpath/shell2.php
0 * * * * php $cpath/globalcron.php" > $cpath/cron.txt
crontab -u root $cpath/cron.txt
#rm $cpath/cron.txt



shell2.php

PHP Quellcode

1
2
3
4
5
6
7
8
9
10
<?
 
	$shell = shell_exec("ps aux | grep ehshell");
	echo "<pre>".$shell."</pre>";
	$pos = strpos($shell, "/var/www/vhosts/meinedomain.de/subdomains/srv1/httpdocs/ehshell.php");
	if ($pos === false) {
		echo "false";
		shell_exec("php /var/www/vhosts/meinedomain.de/subdomains/srv1/httpdocs/ehshell.php & disown");
	}
?>



ehshell.php

PHP Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?
while(1)
{
 
	$shell = shell_exec('ps aux | grep nohup');
	//echo "<pre>".$shell."</pre>";
	$pos = strpos($shell, "/var/www/vhosts/meinedomain.de/subdomains/srv1/httpdocs/nohup.php");
	if ($pos === false) {
		echo "false";
		shell_exec("php /var/www/vhosts/meinedomain.de/subdomains/srv1/httpdocs/nohup.php & disown");
	}
sleep(2);
}
?>


und in der nohup.php taucht ja auch der fehler auf in zeile 15

Hier mal zeile 13 bis 19

PHP Quellcode

1
2
3
4
5
6
7
while($row = mysql_fetch_array($res))
{
	$pid = pcntl_fork();
	if($pid == -1)
		echo "PCNTL_FROK IST NICHT DA";
	else if($pid)
	{


Wie kann ich das den behbenen den Fehler der mein Webserver ausspuckt.... wenn ich das in Plesk auf cgi stelle geht das dennoch nicht :(

Gruß
Dragon


EDIT: habs lösen können bin nach der Anleitung vor gegangen und nun läuft es :)

http://ubuntuforums.org/showthread.php?t=549953

Danke Benny.... hate deinen Beitrag völlig übersehn :)

This post has been edited 2 times, last edit by "Dragon4048" (Oct 24th 2009, 2:55pm)


9

Friday, December 11th 2009, 6:02pm

stream_socket_pair

Mit PHP 5.3 ist stream_socket_pair in Windows implementiert. Nun frage ich mich aber, was macht die Funktion eigentlich für einen Sinn wenn man gleichzeitig pcntl_fork auf Windows nicht verwenden kann? Wenn ich einen neuen Prozess über exec() starte habe ich dort ja nicht das gleiche Socket Pair zur Verfügung, die Prozesse können also trotzdem nicht miteinander kommunizieren.

10

Sunday, December 13th 2009, 5:02pm

vielleicht kann man es einfach als Schritt in die richtige Richtung werten ;) Nativ bekommst du unter Windows jedenfalls noch immer keine forks hin. Cygwin soll aber helfen.

Social bookmarks