WCM Forum

WCM Forum (http://www.wcm.at/forum/index.php)
-   Programmierung (http://www.wcm.at/forum/forumdisplay.php?f=17)
-   -   PHP: kann mir jem sagen, was hier nicht stimmt? (http://www.wcm.at/forum/showthread.php?t=135298)

eAnic 26.05.2004 23:58

PHP: kann mir jem sagen, was hier nicht stimmt?
 
hi

habe folgenden Code aus einem Spamfool script entnommen:

PHP-Code:

$sem_key ftok(__FILE__"T");
echo 
$sem_key;
if (
sem_get!= -1)
{
        
$sem_id sem_get($sem_key200600);
        echo 
$sem_id;
        if (
$sem_id != FALSE)
        {
                if (
sem_acquire($sem_id))
                
createOutput();

                if (!
sem_release($sem_id))
                die (
"Internal Error");
        }


Beim Ausführen des scripts erhalte ich jedoch folgende Meldung:

Fatal error: Call to undefined function: sem_get() in /******/*******/htdocs/******/*****/****.php on line 111

Sorry aber ich versteh die Fehlermeldung nicht ganz.
Lt. div. Tutorials ist sem_get() eine definierte Funktion in PHP4 und die Syntax des Befehls scheint auch richtig zu sein.

Weiß zufällig jem. was hier schief gelaufen ist?

danke

_m3 27.05.2004 00:02

Note: This function does not work on Windows systems.

eAnic 27.05.2004 00:07

Ja, und?
Glaubst, ich arbeite auf Windows? :D

Potassium 27.05.2004 00:18

Zitat:

Original geschrieben von eAnic
Ja, und?
Glaubst, ich arbeite auf Windows? :D

außerdem:
(PHP 4 >= 4.2.0)

_m3 27.05.2004 00:21

Zitat:

Original geschrieben von eAnic
Ja, und?
Glaubst, ich arbeite auf Windows? :D

Was weiß ich? Meine Kristallkugel ist defekt.

eAnic 27.05.2004 07:57

Also nochmal ein wenig detailierter:

Ich habe das script hier gefunden und nach Anleitung installiert.
Einen Alias habe ich nicht angelegt - stattdessen hab ich nur einen Link namens spamfool auf meine virtuelle domain gelegt.

PHP ist in der Version 4.3.4 vorhanden.

käptn 27.05.2004 11:53

Was sagt ein
Code:

s1-iw:~$ php -m | grep sysvsem
sysvsem

?

~

Hannes0815 27.05.2004 16:09

was steht in zeilennummer 111?

eAnic 27.05.2004 18:02

Zitat:

Original geschrieben von käptn
Was sagt ein
Code:

s1-iw:~$ php -m | grep sysvsem
sysvsem

?

~

das sagt bei mir gar nix
wenn ich php -m eingebe erhalte ich folgende Module

[PHP Modules]
ctype
ftp
gd
interbase
mysql
overload
pcre
pgsql
posix
session
standard
tokenizer
xml
zlib

[Zend Modules]

eAnic 27.05.2004 18:03

Zitat:

Original geschrieben von Hannes0815
was steht in zeilennummer 111?
In der Zeile 111 steht folgendes:

PHP-Code:

$sem_id sem_get($sem_key200600); 


paux 27.05.2004 23:46

Zitat:

Original geschrieben von eAnic
wenn ich php -m eingebe erhalte ich folgende Module
[...]

und sysvsem (Unterstützung für System-V-Semaphore) scheint zu fehlen, daher funktionieren die Semaphore nicht. PHP mit --enable-sysvsem neu übersetzen, dann stehen die Funktionen zur Verfügung.

Du kannst diese Funktionalität im Grunde aber auch weglassen, nur bist dann halt vor multiplen Zugriffen nicht geschützt.

lg paux

eAnic 28.05.2004 07:36

Zitat:

Original geschrieben von paux
und sysvsem (Unterstützung für System-V-Semaphore) scheint zu fehlen, daher funktionieren die Semaphore nicht. PHP mit --enable-sysvsem neu übersetzen, dann stehen die Funktionen zur Verfügung.

Du kannst diese Funktionalität im Grunde aber auch weglassen, nur bist dann halt vor multiplen Zugriffen nicht geschützt.

lg paux

Das heisst, Semaphores dienen zur Absicherung bestimmter Files gegen DOS Angriffen richtig?
Ich werde diese Funktion aber Sicherheitshalber neu reinkompilieren, weil den Source Code möchte ich nicht ändern. :)

Danke für die rasche Hilfe!

_m3 28.05.2004 09:18

Zitat:

Original geschrieben von eAnic
Das heisst, Semaphores dienen zur Absicherung bestimmter Files gegen DOS Angriffen richtig?
Nein.
Semaphore dienen dazu, den Zugriff mehrere prozesse auf eine Ressource (File, Shared Memory) zu synchronisieren.

Mah, lernt die Jugend heutzutage gar nichts mehr? :confused: :heul:

http://de.wikipedia.org/wiki/Semaphore_(Programmierung)

eAnic 28.05.2004 11:24

Who cares?

Aber dann hat sich der liebe paux auch geirrt.

Zitat:

Da ich die Ausgabe via sleep() verzögere, kam er auf höchstens 3 Hits/Minute. Zusätzlich benutze ich ohnehin Semaphore, um ein DoS zu vermeiden.

kikakater 28.05.2004 11:49

Was gemacht wird mit einem Semaphor ist einfach: Systemprogrammierung. Rund um den Einsatz eines Semaphors spannt sich ein Verwaltungsprogramm, z.B. ein Spooler (Druckauftragsabarbeitungsprogramm).

Wenn Du selbst Semaphore benutzt, betätigst Du Dich also als Systemprogrammierer - nicht zu verwechseln mit Assemblerprogrammierer.

Du musst also Routinen schaffen, die der Semaphorgesetzmäßigkeit des Verkehrsregelns nachgelagert sind, also Straßen (wie für Autos), Garagen (wie für Autos) etc., etc.

Semaphore sind also die Verkehrsampeln und Verkehrsregeln zugleich durch Constraints (also Zusammenhänge) die mit den Semaphoren paarweise auftreten.

Es gibt zwei Arten von Semaphoren:

Den Mutex (mutual exclusive) und dem alternierenden Semaphor mit Hilfsmittel Warteschlange, der Prozessumreihungen durchführt, das was in Windows und Linux usw. die Grundlage für Prozessverwaltung darstellt - dem "präemptiven Multitasking" ... im Gegensatz zu kooperativem Multitasking wie es Windows 3.11 darstellt.

Es musste in Windows 3.11 unbedingt die gesamte Windows Funktion verlassen werden UND eine neue Windows 3.11 API Funktion (außerdem noch alles in 16bit Adressraum gehalten) aufgerufen werden, bevor ein anderes Programm weiterarbeiten durfte bzw. konnte, weil erst dann festgestellt wurde durch Windows 3.11, daß die Zeitspanne für diesen Prozess bereits verkonsumiert wurde.

Mutual heisst 'beiderseitig', exclusive heißt 'ausschließlich'.

Was das ganze tatsächlich bedeutet ist:

Stillschweigendes Sperren oder Binärer Vorrangszugriff.

D.h. ein Semaphor dient der Kapselung von Ressourcezugriffen und damit dem Sicherstellen von nachvollziehbaren Systemzuständen, nicht jedoch Applikationszuständen, dafür sind wiederum file locks und memory locks in erster Linie und eben nicht Semaphore zuständig.

paux 28.05.2004 14:14

@eAnic: Die Semaphore beschränken in meinem Script die gleichzeitigen Zugriffe auf höchstens 20 Stück. Das vermeidet, daß der Server bei allzu gierigen Spidern in die Knie geht.

lg

eAnic 29.05.2004 01:19

So, ich hab nun php neu kompiliert und das script funktioniert nun wunderbar.
Vielen Dank für eure Hilfe!


Alle Zeitangaben in WEZ +2. Es ist jetzt 09:36 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
© 2009 FSL Verlag