Hi!
Apache berücksichtigt für die HTTP-Requests das advisory Locking des lokalen Filesystems, was ja auch richtig ist.
Und darauf hat die „Art“ des Zugriffs, die du wählst - „namensbasiert“ vs. „handle-basiert“ - keinerlei Einfluss.
Hast Du es denn nun wenigstens mal selber ausprobiert, oder plapperst Du nur nach, was Andere Dir vorplappern?
Was soll man da probieren? Ob der Apache gerade unpässlich ist oder nicht und welcher Grund auch immer dafür verantwortlich ist oder was er sonst noch so intern treibt, kann nicht über die Art der Requesterzeugung seitens des Clients gesteuert werden.
Selbstverständlich kann ich bei den handle-basierten Funktionen jede Schicht gezielt und einzeln auswerten, natürlich aufeinander aufbauend.
Nein, jede Schicht steht dir nicht zur Verfügung, da du erst oberhalb des TCP/IP-Stacks aufsetzt. Und dann kannst du grade mal noch HTTP beeinflussen, was mit dem Stream-Kontext sehr wohl auch mit den Fertigfunktionen möglich ist.
Wenn der Socket nicht klappt, brauch ich gar nicht erst einen Leseversuch vorzunemehmen.
Dachtest du, der http-Wrapper in file_get_contents() ist so dämlich, ohne Fehlerbehandlung zu arbeiten und bricht nicht ab, wenn schon der Verbindungsaufbau nicht klappte?
Wenn aber ein Socket eröffnet werden kann, und ich dann nicht lesen kann, kann ich bei der handle-basierten Vorgehensweise den Stream-Kontext abfragen. Und der sagt mir dann, warum die Ressource nicht lesbar war.
Der kann auch nicht hinter die Kulissen schauen. Das einzige Ergebnis ist der Response-Header - und der ist auch mit den Fertig-Funktionen abfragbar. Na gut, dass der Timeout zugeschlagen hat, kann man auch noch erkennen. Das kann man zur Not noch mit Zeitdifferenzmessen bei den Fertigfunktionen ermitteln, wenn man (warum auch immer in solch einem Fall) den Stream-Kontext-Parameter nicht versorgt hat. Aber warum der Timepout kam, steht auch nicht in dem Stream-Kontext.
Diese Möglichkeit stellt mir die "Schwarze-Kisten-Funktion" trotz ihrer irrwitzigen vielen Schalter und "local source populated arrays" nicht zur Verfügung. Aber vielleicht bauen die das ja auch noch ein? Dann wäre der Unsinn komplett.
Der Stream-Kontext ist schon eingebaut. Die einzige Möglichkeit der Auswertung, die ein Client hat, ist die Auswertung der Response-Header und vielleicht noch der vergangenen Zeit. Die Response-Header bekommt man mit den "Handle-Funktionen" ob man will oder nicht als Teil des Response-Stroms. Wenn man eine Funktion mit dem Wrapper für http verwendet, hat man sie getrennt von den Nutzdaten in $http_response_header stehen.
Lo!