morsche,
habe neuerdings auf einem neuen Server ein kleines Problem mit einem SQL-Script.
Vorraussetzung ist eine Datenbank (liegt bei einem Provider, nicht lokal), die öfters mittels CSV Dateien aktualisiert werden soll.
Lade ich die Dateien mittels PHP hoch und trage die temporäre Datei mit LOAD DATA LOCAL INFILE ein, funktioniert alles prima. Da die max. Dateigröße für Uploads serverseitig in der PHP.ini ja std.mäßig auf 2MB begrenzt ist und ein Upload mit einem Dateidialogfeld im Formular auch nicht sehr komfortabel ist, habe ich für größere Datenmengen einen FTP Upload in ein bestimmtes Verzeichnis vorgesehen. Die dort hochgeladenen CSV Dateien werden online gelistet und per Klick auf einen entsprechenden Link werden diese dann direkt in die DB eingetragen.
Bisher habe ich das ebenfalls mit LOAD DATA machen können und dafür als Dateiname einfach den relativen Pfad der CSV Datei zum Script angegeben.
Nach einem Serverwechsel geht das aber leider nicht mehr.
Mache ich es mit dem LOCAL Statement, findet der SQL Befehl die CSV Datei nicht und ohne LOCAL Statement gibt's ne Access denied Meldung.
Ich habe dann mal im SQL Manual nachgelesen und dort steht, dass, wenn kein LOCAL verwendet wird, eine Datei, die ohne Pfadangabe angegen wird, direkt im SQL Verzeichnis gesucht wird, andernfalls soll SQL im angegebenen Verzeichnis relativ zum Server Root suchen. Das funktioniert aber leider nur mit meinem Offline Server.
Beispiel:
Server:
http://www.testserver.de
FTP Verzeichnis für CSV Dateien:
http://www.testserver.de/projekt/csv/
Script:
http://www.testserver.de/projekt/verwaltung/import.php
Upload von "artikel.csv" in CSV Verzeichnis und CHMOD auf 777.
SQL Befehle, die nicht funktionieren:
PHP-Code:
mysql_query ("
LOAD DATA INFILE '/projekt/csv/artikel.csv' REPLACE INTO TABLE ".$table_prefix."artikel
FIELDS TERMINATED BY ';'
OPTIONALLY ENCLOSED BY '''
ESCAPED BY ''
IGNORE 1 LINES
");
>>>> Access denied!
mysql_query ("
LOAD DATA INFILE '../csv/artikel.csv' REPLACE INTO TABLE ".$table_prefix."artikel
FIELDS TERMINATED BY ';'
OPTIONALLY ENCLOSED BY '''
ESCAPED BY ''
IGNORE 1 LINES
");
>>>> File not found!
mysql_query ("
LOAD DATA LOCAL INFILE '../csv/artikel.csv' REPLACE INTO TABLE ".$table_prefix."artikel
FIELDS TERMINATED BY ';'
OPTIONALLY ENCLOSED BY '''
ESCAPED BY ''
IGNORE 1 LINES
");
>>>> File not found!
etc.
Hat jemand Rat?
Gruß,
morsche