Einzigartiger Name + Dateiendung erkennen (PHP)?

Ich habe folgenden Code:

<?php
     if(isset($_FILES['image'])){
      $errors= array();
      $uniquesavename = time().uniqid(rand());
      $file_name = $uniquesavename . ".pdf";
      $file_size = $_FILES['image']['size'];
      $file_tmp = $_FILES['image']['tmp_name'];
      $file_type = $_FILES['image']['type'];
      $file_url = "https://meine-domain.com/uploads/" . $file_name;
      $file_ext=strtolower(end(explode('.',$_FILES['image']['name'])));

      $extensions= array("pdf", "png", "doc");

      if(in_array($file_ext,$extensions)=== false){
        $errors[]="<span>Bitte wähle eine .pdf, .png oder .doc-Datei!</span>";
      }

      if($file_size > 20000000) {
        $errors[]="<span>Deine Datei muss kleiner als 200 MB sein.</span>";
      }

      if(empty($errors)==true) {
        move_uploaded_file($file_tmp,"d/".$file_name);
        echo "<span>Du hast erfolgreich ein neues Dokument geteilt!</span>";
      } else {
        print_r($errors[0]);
      }
     }
   ?>

Ich möchte, dass bei $file_name = $uniquesavename . ".pdf"; ein einzigartiger String generiert wird (funktioniert bereits) und dass die Endung der Datei die hochgeladen wurde, hinzugefügt wird. Also z.B. wenn ich eine .doc-Datei hochlade, wird die Datei als 271sgt1721dee.doc auf meinem Server abgespeichert.

Kann die Datei eigentlich auch extern abgespeichert werden? z.B. auf einer externen Webseite/Server? Wenn ja, wie?

Ich hoffe ich habe hier keinen mit dieser Frage überfordert oder genervt, habt vielen Dank für eure Antworten bereits im Voraus!

Server, Computer, Programmieren, Programmierung, PHP
2 Antworten
Fehlt hier irgendwo ein Klammer (PHP)?

Hallo liebe Communtiy,

Ich arbeite gerade an einer Register Form und benutze dazu Ajax. Der Php Teil der alles überprüft funktioniert leider nicht, denn ich bekomme folgende Fehlermeldung:

Parse error: syntax error, unexpected end of file in C:\xampp\htdocs\chatex\register\check.php on line 57

Ich habe mehrmals nachgezählt aber bei mir fehlen keine Klammern und PHPStrom sagt auch dass alles okay sei. Findet ihr vielleicht den Fehler?

Besten Dank schon mal im Voraus!

MfG, Hallllomenschen

Code:

<?php
require "../manager/user.php";
require "../manager/mySql.php";

if(($_POST['email'] !== "") &amp;&amp; ($_POST['pass'] !== "") &amp;&amp; ($_POST['username'] !== "") &amp;&amp; ($_POST['repeat'] !== "")){

    $mysql = new mySql();
    $count = $mysql-&gt;getCount("SELECT * FROM `userdata` WHERE `Username` = '" . $_POST['username'] . "'");

    if($count === 0){

        $count = $mysql-&gt;getCount("SELECT * FROM `userdata` WHERE `Email` = '" . $_POST['email'] . "'");

        if($count === 0){

            if(strlen($_POST['pass']) >= 8){

                if($_POST['pass'] === $_POST['repeat']){

                    $mysql-&gt;sendCmd("INSERT INTO `userdata`(`Username`, `Email`, `Password`) VALUES ('".$_POST['username'] ."', '" . $_POST['email'] . "', '" . $_POST['pass'] . "'");
                    session_start();
                    $_SESSION['email'] = $_POST['email'];

                    <script>design.showNotification('top','right', 'Du wurdest erfolgreich registriert!');</script>
                    <meta http-equiv="refresh" content="2; url=../home/">

                <?php} else {?>

                    <script>design.showNotification('top','right', 'Die beiden Passwörter stimmen nicht überein!')</script>

                <?php}

            } else {>

                <script>design.showNotification('top','right', 'Das Passwort muss mind. 8 Zeichen lang sein!');</script>

            <?php}

        } else {?>

            <script>design.showNotification('top','right', 'Die angegebene Email wird bereits verwendet! Möchten Sie sich stattdessen anmelden?');</script>
        <?php}

    } else {?>

        <script>design.showNotification('top','right', 'Bitte wähle einen anderen Username!');</script>

    <?php}

} else {?>

    <script>design.showNotification('top','right', 'Du musst alle Felder auswählen!');</script>

<?php}

?>
Computer, Programmieren, Fehlersuche, Informatik, PHP, Troubleshooting
3 Antworten
Kann mir jemand in AJAX helfen?

Hallo liebe Community,

ich habe angefangen, meine Website mit AJAX zu programmieren. Allerdings will es einfach nicht funktionieren.

Ich verwende AJAX mit jQuery in Kombination mit PHP. Ich habe es einem YouTuber in seinem Video nachgemacht und den Code nur etwas an meine Bedürfnisse angepasst.

Ich möchte in einer Tabelle in HTML die Daten aus einer DB eingeben, aber erst nachdem der Benutzer seine ID angegeben hat, soll die Tabelle angezeigt werden. Ich denke, im Code sieht man alles besser, als wenn ich es hier erkläre.

Ich hoffe, es kann mir jemand weiterhelfen.

Index.php:

<html>
<body>
  <form>
    <input id="id" type="number">
    <button type="button" id="btn">Submit</button>
  </form>
  <div id="info"></div>
  <script src="core/js/jquery-3.5.1.min.js"></script>
  <script src="core/js/getData.js"></script>
</body>
</html>

getData.js:

$(document).ready(function() {
  $("#btn").click(function() {
    var id = $("#id").val();

    $.ajax({
      type: "POST",
      url: "index2.php",
      data: { id: id },
      success: function (data) {
        $('#info').html(data);
      }
    })
  })
})

index2.php:

<?php
  require 'core/classes/user.php';

  $user = new user($_POST['id']);
?>
<html>
  <body>
    <table>
      <tr>
        <th>ID</th>
        <th>USERNAME</th>
        <th>EMAIL</th>
      </tr>
      <tr>
        <th><?php echo $user->id; ?></th>
        <th><?php echo $user->username; ?></th>
        <th><?php echo $user->email; ?></th>
      </tr>
    </table>
  </body>
</html>

In der User-Klasse werden die Daten des Benutzers, welcher im Konstruktor als Parameter übergeben werden, aus der DB entnommen und in den Attributen $id, $username und $email gespeichert. Diese werden in der index2.php auch verwendet.

Die Tabelle und die Klasse an sich funktionieren auf jeden Fall, dass habe ich überprüft.

Es wäre ganz toll, falls mir jemand bei meinem Problem helfen könnte.

Mit freundlichen Grüßen,

Hallllomenschen

Computer, Technik, Programmieren, JavaScript, AJAX, Informatik, JQuery, PHP, Technologie, Webentwicklung
2 Antworten
FTP-Server schickt keine Antwort?

Hallo Leute,

Ich habe von der letzten Frage https://www.gutefrage.net/frage/ftp-ueber-fsockopen-von-php meinen Code Erweitert/Umgebaut:

<?php
class FTP_TEST{

    private $username;     private $password;     private $server;     private $port;     private $timeout;     private $conn;     private $username_return;     private $password_return;     private $test;     private $test2;

    public function __construct($username,$password){         $this->password = $password;         $this->username = $username;         $this->server = "link_to_server";         $this->port = 21;         $this->timeout = 20;     }

    private function connect(){         $this->conn = ftp_ssl_connect($this->server,$this->port,$this->timeout);     }     private function close(){         ftp_close($this->conn);     }     private function secure(){         if (is_resource($this->conn)) {             $command = ftp_raw($this->conn, 'AUTH TLS');             $responseCode = (int) substr($command[0], 0, 3);

            if ($responseCode === 234) {                 // AUTH TLS success                 return true;

            } else { // if TLS rejected try SSL

                $command = ftp_raw($this->conn, 'AUTH SSL');                 $responseCode = (int) substr($command[0], 0, 3);

                if ($responseCode === 234) {                     // SSL authentication success                     return true;

                } else {
                    // Cannot secure the data channel and command channel
                    return false;
                }
            }
        }else{
            return false;
        }
    }
    private function login(){
        print_r(ftp_raw($this->conn,"OPTS UTF8 ON"));
        $tmp_str_user = "USER " . $this->username;
        $tmp_str_pass = "PASS " . $this->password;
        $this->test2 = array("user"=>$tmp_str_user,"pass"=>$tmp_str_pass);
        $this->username_return = ftp_raw($this->conn,trim($tmp_str_user));
        $this->password_return = ftp_raw($this->conn,trim($tmp_str_pass));
        $this->test = ftp_raw($this->conn,"NOOP");
    }
    public function make_test(){
        $this->connect();
        if($this->secure()){
            $this->login();
            $this->close();
            return array($this->test2,$this->username_return,$this->password_return,$this->test);
        }else{
            //Es konnte keine TLS/SSL - Verbindung hergestellt werden
            return "0.TLS-SSL";
        }
    }
}
$ftp = new FTP_TEST("user","pass");
print_r($ftp->make_test());
?>

Ich habe den Code einmal mit einem Filezilla-Server versucht da hat dieser Funktioniert(habe ohne SSL getestet).

Nun habe ich es mit meinem echten FTP-Server versucht (PureFTPd auf Debian10) jedoch bekomme ich ab AUTH TLS auf keinen Command mehr eine Antwort.

Auf dem FTP-Server ist ein gültiges SSL-Zertifikat hinterlegt und der Server antwortet auch (wenn ich die Befehle z.B. über Filezilla Client) schicke.

Danke schonmal für die Hilfe!

Server, Computer, Internet, Technik, FTP, PHP, FTP-Server, Socket
1 Antwort
php , Uhrzeit > als prüfen ?

Hi Leute,

ich mal wieder nicht weiter.

Was möchte mich lösen?
Ich schreibe mir gerade ein kleines Script, welches prüft, ob ein Geschäft geöffnet ist und ob ein Feiertag vorliegt.

Es funktioniert alles, bis auf eine Sache.

Code - Schnipsel

  	$date_now = date('N'); // aktueller Wochentag
  	$time_now = date('H'); // aktuelle Stunde
    $time_min = date('i'); // aktuelle Minuten

  	if($date_now > 0 AND $date_now < 6)
    {
    	if($time_now >= 8 && $time_min >= 30 && $time_now <= 12)
        {
           $outputZeit= "<p>Die Kanzlei ist geöffnet.</p>"; // offen
    	}
        elseif($time_now >= 14 )
        {
          $outputZeit= "<p>Die Kanzlei ist geöffnet.</p>"; // Geschlossen
        }
        elseif($time_now >= 12 && $time_now <= 14)
        {
           $outputZeit= "<p>Wir sind in der Mittagspause. 
                         Ab 14:00 Uhr sind wir wieder für Sie da.</p>"; // Pause
        }
        elseif($time_now >= 17)
        {
           $outputZeit= "<p>Die Kanzlei geschlossen.</p>"; // Feierabend
        }
        elseif($date_now == 5 && $time_now >= 16 && $time_min >= 30 )
        {
          $outputZeit= "<p>Die Kanzlei geschlossen.</p>"; // Geschlossen
        }
        else
        {
           $outputZeit= "<p>Die Kanzlei geschlossen.</p>"; // Feierabend
    	}
    }
    else
    {
    	     $outputZeit= "<p>Am Wochenende ist die Kanzlei 
                              geschlossen.</p>"; // wochenende
  	}

Was soll passieren?
- Bis 08:30 Uhr soll -> geschlossen angezeigt werden
- Ab 08:30 bis 13:00 -> soll offen angezeigt werden.
- Von 12:00 bis 14:00 -> soll Pause angezeigt werden
- usw.

Was funktioniert nicht., ?

Sobald eine voll Stunde angebrochen ist, wird geschlossen angezeigt, obwohl die Ladenöffnung (08:30) schon längst überschritten wurde.

Z.B:

  • Wir haben 08:45Uhr == Ausgabe richtig angezeigt
  • Wir haben 09:01Uhr == Ausgabe wird falsch angezeigt, bis 09:30 erreicht ist.

Der Fehler tritt quasi immer von der "vollen Stunde" bis Erreichen der 30sten Minute der jeweiligen Stunde auf.

Hoffe ist versteht was ich meine.

Vielen schon mal für eure Hilfe.

Computer, Programmieren, PHP
1 Antwort
FTP über fsockopen von PHP?

Hallo Leute,

ich habe mir folgenden Code zusammengebastelt:

<?php
  // Öffnen eines Sockets
  $fp = fsockopen("das-ist-ein.ftp-server.de", 21, $errno, $errstr);

  if (!$fp) {
    echo "ERROR:" . $errno . "-" . $errstr . "<br />";
    echo "<br /><br />";
    // Zusätzliche Ausgabe
    print_r($fp);
  }
  else {
    // Ausgabe, das hier die eigentliche Rückgabe startet
    echo "ANFANG VOM BEFEHLE SENDEN:<br />";
    // TLS enable
    echo fwrite($fp, "AUTH TLS\n");
    // Rückgabe von TLS (234 ....)
    echo "<br />1. " .fread($fp, 1024).'<br>';
    // Benutzernamen übermitteln
    fwrite($fp, "USER irgendein_benutzer\n");
    // Hier sollte eine Rückgabe kommen, dass Benutzer ok, aber Passwort benötigt
    echo "<br />2. " .fread($fp, 1024).'<br>';
    // Passwort übermitteln
    fwrite($fp, "PASS geheimes_passwort\n");
    // Hier Rückgabe von Server nach Login
    echo "<br />3. " .fread($fp, 1024).'<br>';
  }

  // Socket schließen
  fclose($fp);
?>

Dieser sollte eigentlich alle Nachrichten bis nach Login ausgeben.

Das Verbinden zum Server funktioniert immer. Der AUTH TLS auch. Nur die anderen Befehle halt nicht mehr (obwohl diese für FTP verwendet werden).

Meine Vermutung ist, dass der Server ein paar Momente braucht, um einen Befehl auszuführen und eine Rückgabe zu geben. Diese Vermutung lässt sich begründen, da ich beobachtet habe, dass ich, wenn der Server gut ausgelastet ist, (> 80%) die Rückgabe von "AUTH TLS" erst bei "2. " oder "3. " bekomme.

Meine Frage jetzt:

Gibt es in PHP eine Funktion, die solange wartet, bis der Response vom Socket fertig angekommen ist?

Btw:

Die Lösung mit

while (!feof($fp))

funktioniert nicht und endet in einem Laufzeitfehler von PHP (auch ohne ! etc.), auch wenn ich die maximale Laufzeit schon bei über 10min hatte.

Die Lösung mit socket_recv funktioniert auch nicht. Wenn ich diese verwende, kommt: "socket_recv() schlug fehl; Grund: Success".

Falls sich jetzt jemand die Frage stellt, warum ich nicht einfach die normalen FTP-Befehle von PHP nutze:

Ich benötige die 2-3 Nachrichten nach dem Login als Auswertung und die Standard-FTP-Befehle geben keine Rückgabe bzw. nur true oder false zurück.

Computer, Technik, Programmieren, FTP, Login, PHP, Technologie, Webserver, Socket
1 Antwort

Meistgelesene Fragen zum Thema PHP