AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

[PHP] touch geht nicht

Ein Thema von Luckie · begonnen am 16. Nov 2005 · letzter Beitrag vom 16. Nov 2005
Antwort Antwort
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#1

[PHP] touch geht nicht

  Alt 16. Nov 2005, 06:18
Ich versuche gerade mit touch das Datum einer Datei neu zu setzen. Doch
leider schlägt touch mit der Fehlermeldung
Zitat:
Warning: touch(): Utime failed: Operation not permitted in
/var/www/l3s11195/html/Developer/Artikel/settimestamp.php on line 48
fehl.

Die entsprechende Zeile sieht wie folgt aus:
Code:
touch("ICQLog_Win32API.shtml", strtotime("2003-09-17 15:12"));
Ist der Server eventuell so konfiguriert, dass diese Operation nicht erlaubt
ist?

Eine Datei mit touch anlegen geht übrigens.

Jetzt habe ich auf http://de.php.net gelesen:
Zitat:
Here's a little workaround that allows the PHP user to touch a file it
doesn't own:

Code:
<?php

   $target_file = "/path/to/file/filename.txt"; //system filepath to your
file
   $file_content = implode("",file($target_file));
   @unlink($target_file);
   if($savetofile = fopen($target_file, "w")) {
       fputs($savetofile, $file_content);
       fclose($savetofile);
   }
   $new_date = strtotime("23 April 2005"); // set the required date
timestamp here
   touch($target_file,$new_date);

?>
Bzw. die Ergänzung:
Zitat:
Here's how the code SHOULD be written:

Create the new file FIRST, rather than last, with a different
name such as $file.tmp.
Read the ownership, permissions, and creation time of the old file.
Set permissions and creation time of the new file the same as the old.
Rename the new file to the name of the old.
chown() the new file to the user that owned the file it's replacing.
Daraus resultiert folgend er Code:

Code:
function mytouch($file, $timestamp)
   {
     clearstatcache();
     $file = $_SERVER['DOCUMENT_ROOT']."/Developer/Artikel/".$file;
     echo "Datei: $file
";
     $ctime = filectime($file);
     echo "Datum: ".date("Y-m-d H:i", $ctime)."
";
     $owner = posix_getpwuid((fileowner($file)));
     echo "Besitzer: ".$owner["name"]."
";
     $perm = decoct(fileperms($file));
     echo "Attribute: $perm
";
     $file_content = implode("",file($file));
     if($savetofile = fopen('~.tmp', "w")) {
         fputs($savetofile, $file_content);
         fclose($savetofile);
     }

     if (@chmod('~.tmp', octdec($perm)))
     {
       echo "Attribute neu: ".decoct(fileperms('~.tmp'))."
";
     }
     else
     {
       echo "Dateiattribute konnten nicht gesetzt werden.
";
     }

     touch('~.tmp', $ctime);

     rename('~.tmp', $file);

     if (@chown($file, intval($owner["uid"])))
     {
       $owner = posix_getpwuid((fileowner($file)));
       echo "Besitzer: ".$owner["name"]."
";
     }
     else
     {
       echo "Besitzer konnte nicht geändert werden.
";
       $owner = posix_getpwuid((fileowner($file)));
       echo "Besitzer neu: ".$owner["name"]."
";
     }

     $new_date = $timestamp; // set the required date timestamp here
     $err = touch($file,$new_date);
     if ($err)
     {
       echo "Datum neu: ".date("Y-m-d H:i", filemtime($file))."
";
     }
     echo "<hr>
";
     return $err;
   }
Aber da nach ist der Besitzer immer "apache". Was natürlich nicht erwünscht
ist.

Nach dem mir die Datei nicht mehr gehört, sondern "apache" der Besitzer ist,
schlägt folgende Zeile
Code:
include $_SERVER['DOCUMENT_ROOT'].'/includes/head.shtml';
Mit folgenden Warnungen fehl:
Zitat:
Warning: main(): SAFE MODE Restriction in effect. The script whose uid is 48
is not allowed to access /var/www/l3s11195/html/includes/head.shtml owned by
uid 3922 in /var/www/l3s11195/html/Developer/Artikel/API_Zauberwuerfel.php
on line 13

Warning: main(/var/www/l3s11195/html/includes/head.shtml): failed to open
stream: No such file or directory in
/var/www/l3s11195/html/Developer/Artikel/API_Zauberwuerfel.php on line 13

Warning: main(): Failed opening '/var/www/l3s11195/html/includes/head.shtml'
for inclusion (include_path='.') in
/var/www/l3s11195/html/Developer/Artikel/API_Zauberwuerfel.php on line 13
Und deswegen müsste entweder touch funktionieren oder ich muss mit dem
Script (mytouch) Besitzer der Datei bleiben.

Ich bin da etwas ratlos, was da auf dem Server los ist. Es muss doch möglich
sein das Dateidatum von Dateien zu ändern deren Besitzer ich bin.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.017 Beiträge
 
Delphi 12 Athens
 
#2

Re: [PHP] touch geht nicht

  Alt 16. Nov 2005, 06:34
Bei mir funktionierten damals derartige Spielereien auch nicht, weil ebenfalls noch einige Sachen gesperrt waren.

Abhilfe hatte eine ganz nette Anfrage an meinen Provider erbracht
Eventuell schaltet deiner es dir auch kostenlos frei - manche wollen aber auch Kohle sehn, wenn sie bestimmte Features freischalten sollen -.-''
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#3

Re: [PHP] touch geht nicht

  Alt 16. Nov 2005, 10:00
Wie gefährlich kann denn touch sein?
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.017 Beiträge
 
Delphi 12 Athens
 
#4

Re: [PHP] touch geht nicht

  Alt 16. Nov 2005, 10:35
Och, du glaubst garnicht was mal alles für harmlose Sachen als gefährlich ansieht.
Aber es kann ja auch sein, daß die nur was anderes gesperrt haben und dieses einfach nur irgendwie damit zusammenhängt, oder es wurde etwas noch nicht freigeschaltet, was standardmäßig aus ist


[add]
zu moritz's Beitrag:
bleibt nur zu hoffen, daß du diese Rechte auch hast, chown(...) ist ja eh oftmals abgeschalte/eingeschränkt, damit man an den Rechten nichts drehen kann ._.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
moritz

Registriert seit: 18. Apr 2003
1.037 Beiträge
 
#5

Re: [PHP] touch geht nicht

  Alt 16. Nov 2005, 10:42
Also, das Problem bei solchen Servern ist, dass der FTP-User meist ein anderer als der PHP-User ist. D.h., Datein, die du mit FTP auf den Server spielst, gehören dir, und Dateien, die du per PHP aufspielst, gehören dem Apache/PHP-User. Da du als Apache-User allerdings die Rechte hast, musst du einfach ein chown(Dein-FTPUSERNAME) in deinen mytouch-Script einbauen, um den Besitzer wieder auf den FTP-User zu wechseln.
Dann sollte das klappen.

Gruß
"Optimistisch ist diejenige Weltanschauung, die das Sein höher als das Nichts stellt und so die Welt und das Leben als etwas an sich Wertvolles bejaht."
Albert Schweitzer
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#6

Re: [PHP] touch geht nicht

  Alt 16. Nov 2005, 15:29
Das hab eich in dem Script ja schon probiert, wenn du es dir genau anguckst, nur scheint es nicht zu gehen, wenn der apache der Besitzer ist:
Code:
if (@chown($file, intval($owner["l3s11195"])))
     {
       $owner = posix_getpwuid((fileowner($file)));
       echo "Besitzer: ".$owner["name"]."
";
     }
     else
     {
       echo "Besitzer konnte nicht geändert werden.
";
       $owner = posix_getpwuid((fileowner($file)));
       echo "Besitzer neu: ".$owner["name"]."
";
     }
Zitat:
Datei: /var/www/l3s11195/html/Developer/Artikel/ICQLog_Win32API.shtml
Datum: 2005-11-16 15:27
Besitzer: l3s11195
Attribute: 100644
Attribute neu: 100644
Besitzer konnte nicht geändert werden.
Besitzer neu: apache
Datum neu: 2005-11-16 15:27
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:38 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz