Autor | Zpráva | ||
---|---|---|---|
gardener Profil |
Zdravím,
mám skript pro import dat z CSV, na localhostu funguje vše o.k ale pokud se snažím to rozjet na serveru, dostanu hlášku: Access denied for user 'moje_uz_jmeno'@'%' (using password: YES) myslel jsem, že by to třeba ,ohl mít na svědomí dbčonnect příkaz, v případě, že bych se předtím již k db připojil a připojení neukončil, ale to se nepotvrdilo, pokud by někdu tušil, čím by to mohlo být způsobeno, budu rád za každou radu. PS:pokud mám například insert do db z formuláře, tak to funguje v pořádku. Kód: <?php if(($_SESSION['prihlasen'] != 1) && ($_SESSION['je_admin'] != 1)) { die ("Nemate nastavena opravneni k pristupu"); } if(isset($_POST["submit_import"])) { $soubor_nazev =$_FILES['data']['name']; if ($_FILES["data"]["error"] > 0) { echo "Error: " . $_FILES["file"]["error"] . "<br />"; } if ($_FILES['data']['size']/1024 > 50) die ("Soubor je příliš velký"); $koncovka=end(explode(".",$soubor_nazev)); if ($koncovka != "csv") { die("Je mozne nahravat pouze so ubory s priponou csv"); } if (move_uploaded_file($_FILES['data']['tmp_name'],$soubor_nazev)) { include_once ("../db_connect.php"); $smazat_tabulku = mysql_query("TRUNCATE TABLE products"); if (!$smazat_tabulku) { die("Přepsání tabulky se nezdařilo, zkontrolujte prosím validitu formátu vstupních dat"); } $soubor = mysql_real_escape_string(dirname(__FILE__) . '\\' . $soubor_nazev); //echo($soubor); Is here because i needed known absolute path for imported file $vlozeni = mysql_unbuffered_query ("LOAD DATA INFILE '".$soubor."' INTO TABLE products FIELDS TERMINATED BY ';' LINES TERMINATED BY '\r\n' (name,medic_form,size_pack,stock_price,orc_price,vzp_price) ;")OR die(mysql_error()); } //LINES TERMINATED BY JE NASTAVENI PROTO ABYCHOM MOHLI DEFINOVAT PODLE CEHO // ROZDELOVAT POLE DO SLOUPCU, tzn, v tomto pripade je to carka ',' if (!$vlozeni) { //mysql_error($vlozeni); echo mysql_error(); die("Vlozeni se nepodařilo, zkontrolujte prosím validitu formátu vstupních dat"); } else { echo("<span class=\"notice\">Import dat proběhl v pořádku\n\r</span>"); } } ?> <form action="<?php echo $_SERVER["PHP_SELF"]?>" method="post" enctype="multipart/form-data"> <fieldset> <legend>Nahrát do databáze nový seznam(MAX.1 Mb)</legend> <label for="">Upozornění: tato akce přepíše data v databázi přípravků, doporučujeme data před touto akcí zálohovat.</label> <br /> <label for="soubor">Vybrat soubor CSV()</label> <br /> <input name="data" id="soubor" type="file" class="textinput" title="Proveďte výběr souboru ve formátu CSV, který bude importován do DB" /> <br /> <br /> <input type="submit" name="submit_import" value="nahraj" /> </fieldset> </form> |
||
tiso Profil |
#2 · Zasláno: 19. 6. 2009, 13:23:40
Ako vyzerá súbor db_connect.php?
|
||
TomášK Profil |
#3 · Zasláno: 19. 6. 2009, 13:26:29
Pravděpodobně máš špatně přihlašovací údaje k databázi nebo server, ke kterému se připojuješ.
|
||
MrVain Profil |
#4 · Zasláno: 19. 6. 2009, 13:41:52 · Upravil/a: MrVain
[#3]
Nie! :D Nemas File Access. Napis im to na podporu a mali by vediet. ;) Ak mas jeden z tych lacnych hostingov tak urcite. mail@dxin.org |
||
gardener Profil |
#5 · Zasláno: 19. 6. 2009, 14:41:30
Take bych se priklanel k file access, nebot pokud se to netyka souboru, tak vse pracuje o.k, jenom u importu ze souboru to nejde..
Ale nicmene db_connect je takto: <?php if ($_SERVER["SERVER_ADDR"]=="127.0.0.1") { define("SQL_HOST","localhost"); define("SQL_DBNAME","cio"); define("SQL_USERNAME","root"); define("SQL_PASSWORD",""); } else { define("SQL_HOST","00.00.49.81"); define("SQL_DBNAME","cz"); define("SQL_USERNAME","cz"); define("SQL_PASSWORD","h9"); } //Define parameters for localhost and testing server $id_spojeni = mysql_pconnect(SQL_HOST, SQL_USERNAME, SQL_PASSWORD); //command for db connect with three parameters server,user,password if (!$id_spojeni){ die('Spojení s Mysql DB se nezdaoilo.'); } //if verify id for connect failed(return false)will be written error message $vysledek_vybrani = mysql_select_db(SQL_DBNAME,$id_spojeni); if (!$vysledek_vybrani){ die('Databázi se nepodaoilo vybrat.'); } $set = mysql_query ('SET CHARACTER SET utf8'); if (!$set){ die('Nepodařilo se nastavit kódování databáze.'); } require_once("db_create.php"); require_once("db_products_create.php"); //It same,if verify id for connect failed(return false)will be written error message ?> |
||
AM_ Profil |
#6 · Zasláno: 19. 6. 2009, 15:02:34 · Upravil/a: AM_
„Access denied for user 'moje_uz_jmeno'@'%' (using password: YES)“
tuhle chybu mysql vyhazuje při špatných zadaných přihlašovacích údajích. S právy k souborům to nemá nic společného (viděl jsem už různé divné věci, ale s timhle jsem si dost jistý) //P.S. zkus se se stejnými údaji přihlásit přes myadmina. |
||
gardener Profil |
#7 · Zasláno: 19. 6. 2009, 15:08:06
Praveze udaje jsou o.k, jelikoz db vyuzivam i k prihlaseni..mozna na IP napevno tomu vadi..jinak take me to poradne zaskocilo..
|
||
AM_ Profil |
#8 · Zasláno: 19. 6. 2009, 15:09:32
„mozna na IP napevno tomu vadi..“
jo, to je možné, mnohem spíš než nějaká práva k souborům :) nezbývá než kontaktovat správce databáze. |
||
gardener Profil |
#9 · Zasláno: 19. 6. 2009, 15:12:46
Dost mozna, je to tim, ze nemam pristupova prava do adresare, kde je docasne nahran soubor, nez je zkopirovan na misto urceni a proveden z nej LOAD DTA INFILE...
|
||
TomášK Profil |
#10 · Zasláno: 19. 6. 2009, 16:44:55
AM_
Původně jsem taky myslel, že tahle hláška je jen při přihlašování do databáze. MrVain mě opravil, zkusil jsem to hodit do googlu a souhlasím s ním - nemá právo pro přistuopvat k souborům - viz http://dev.mysql.com/doc/refman/5.1/en/privileges-provided.html#priv_file |
||
gardener Profil |
#11 · Zasláno: 19. 6. 2009, 17:02:04
Jasny, jsem rad, ze jsme se shodli, jenze co se s tim da delat? Mohu to nejak obejit?
|
||
gardener Profil |
#12 · Zasláno: 19. 6. 2009, 18:06:56 · Upravil/a: gardener
Zdravim
Mám problem s opravnenimi na hostingu, pomoci formu nactu soubor, ten uploaduju a pomoci move_uploaded_file chci presunout a pote ho nacist do DB pomoci LOAD DATA INFILE. Jenze problem je v tom, ze v docasnem adresari, kde se ten soubor ulozi, pred tim nez je presunut ja nemam prava pro prisup, no a tim padem my skript vyhodi chybu: Access denied for user 'uzivatelcz'@'%' (using password: YES) a nebo pokud se soubor csv, nejmenuje stejne jako soubor, ktery se ma prepsat a pote nacist, tak dostanu hlasku: Warning: move_uploaded_file(export.csv) [function.move-uploaded-file]: failed to open stream: Permission denied in /data/web/virtuals/web/admin/nahraj_seznam.php on line 19 Warning: move_uploaded_file() [function.move-uploaded-file]: Unable to move '/tmp/phpPeywfq' to 'export.csv' in /data/web/virtuals/web/admin/nahraj_seznam.php on line 19 Nesetkal se s tim nekdo prosim? Protoze psat na podporu jstli by mi do toho adresare mohli zmenit CHMOD, je asi utopie:).. Kod: if(isset($_POST["submit_import"])) { $soubor_nazev =$_FILES['data']['name']; if ($_FILES["data"]["error"] > 0) { echo "Error: " . $_FILES["file"]["error"] . "<br />"; } if ($_FILES['data']['size']/1024 > 50) die ("Soubor je příliš velký"); $koncovka=end(explode(".",$soubor_nazev)); if ($koncovka != "csv") { die("Je mozne nahravat pouze so ubory s priponou csv"); } if (move_uploaded_file($_FILES['data']['tmp_name'],$soubor_nazev)) { include_once ("../db_connect.php"); $smazat_tabulku = mysql_query("TRUNCATE TABLE products"); if (!$smazat_tabulku) { die("Přepsání tabulky se nezdařilo, zkontrolujte prosím validitu formátu vstupních dat"); } $soubor = mysql_real_escape_string(dirname(__FILE__) . '\\' . $soubor_nazev); //echo($soubor); Is here because i needed known absolute path for imported file $vlozeni = mysql_unbuffered_query ("LOAD DATA INFILE '".$soubor."' INTO TABLE products FIELDS TERMINATED BY ';' LINES TERMINATED BY '\r\n' (name,medic_form,size_pack,stock_price,orc_price,vzp_price) ;")OR die(mysql_error()); } //LINES TERMINATED BY JE NASTAVENI PROTO ABYCHOM MOHLI DEFINOVAT PODLE CEHO // ROZDELOVAT POLE DO SLOUPCU, tzn, v tomto pripade je to carka ',' if (!$vlozeni) { //mysql_error($vlozeni); echo mysql_error(); die("Vlozeni se nepodařilo, zkontrolujte prosím validitu formátu vstupních dat"); } else { echo("<span class=\"notice\">Import dat proběhl v pořádku\n\r</span>"); } |
||
gardener Profil |
#13 · Zasláno: 19. 6. 2009, 20:04:55
Nikdo v patek vecer nema cas?:]
V postate asi tusim kde by se mohla chyba vyskytovat, ale potreboval bych k ni "nakopnout", file se presune, tam kam ma, to je fajn, takze ted by se asi slusilo nastavit absolutni cestu k souboru na LOAD DATA IN FILE, jenze uz nevim jak aby to chodilo na hostingu.. Nebo jsem mimo a je chyba jinde? |
||
fajzen Profil |
#14 · Zasláno: 19. 6. 2009, 21:04:32
„Access denied for user 'uzivatelcz'@'%' (using password: YES)“
toto je chyba spojenia s databázou, nie prístupu k súborom do dočasného adresára, kam sa ukladajú odoslané súbory, prístup určite máš. Skôr musíš zmeniť CHMOD cieľového adresára |
||
TomášK Profil |
#15 · Zasláno: 19. 6. 2009, 22:52:14
Můžeš požádat správce databáze, aby ti přístup přidělil. Druhá možnost, která nevím, jestli půjde je
klíčové slovo LOCAL - něco jako LOAD DATA LOCAL INFILE (přesná syntaxe bude v dokumentaci, nepamatuju si ji), která ti umožní nahrát soubor z tvého počítače - pokud to potřebuješ na jednorázové importy. |
||
AM_ Profil |
řešíš to tu už v jednom tématu, tak proč zakládáš nové? dotaz formuluješ jinak, ale mám pocit, že se jedná o stejný problém - access denied
Moderátor Chamurappi: Sloučeno.
|
||
Časová prodleva: 3 dny
|
|||
gardener Profil |
#17 · Zasláno: 22. 6. 2009, 14:24:18
Zdravim,
Uz treti den resim vsemi moznymi zpusoby jeden drobny problem, ale at delam co delam, nemohu se dopracovat k reseni, proto bych chtel poprosit nekoho zkuseneho o radu. Popis> Nahravam pomoci LOAD DATA INFILE do DB> na LH vse o.k, na serveru se ale nasledujici problem: Vypise se hlaska: /data/web/virtuals/_/wwwAccess denied for user 'uz_jmeno'@'%' (using password: YES) Prihlasovaci udaje do DB mam korektni, s jinymi skripty ktere pracuji s DB funguje bez problemu. Z hostingu mi napsali, ze mam zkusit pouzit "localhost" namisto "%" ale ja nikde "%" nepouzivam, pouzivam klasicky "linux15.ignum.cz" Zkusil jsem tedy dosadit primo absolutni cestu na serveru pro LOAD DATA INFILE, natrefil jsem ale na dvě rozdílné hodnoty: první:getcwd() vraci >/data/web/virtuals/nejakyweb.cz/www/nejakasubdomena-alfa/admin/uploads/ druhy:$_SERVER['DOCUMENT_ROOT']; vraci>/data/web/virtuals/_/www Ani jedna z nich ale nefunguje pokud ji dosadim jako absolutni cestu k souboru plus jeho nazev. Uz proste nevim co dal, soubor zkopiruji tam kam mam, a chci ho jenom nacist do SQL, je to vcelku banalita ale takovy problem jsem s tim vazne necekal, pokud by nekdo vedel, budu oc vdecny za kazdou radu. PS>LOAD DATA LOCAL INFILE jsem zkousel, ale neni povolen |
||
tiso Profil |
gardener - mal si pokračovať v pôvodnom vlákne. Jedno upozornenie nestačilo?
Moderátor Chamurappi: Všechno sloučeno. Bez jakéhokoliv pročištění. Jestli to někdo z kolegů chce pročistit, může.
|
||
gardener Profil |
#19 · Zasláno: 22. 6. 2009, 14:52:19
Jiste, ale uz bylo celkem stare a nevic asi se to tyka jenom MySQL..takze zde je lepsi to resit..
|
||
tiso Profil |
#20 · Zasláno: 22. 6. 2009, 15:35:24
gardener - to sú nezmyselné argumenty
1. odpoveď vyťahuje vlákno hore. 2. čo ak riešenie je možné spraviť v PHP? |
||
gardener Profil |
#21 · Zasláno: 22. 6. 2009, 15:43:24
Tak se mi povedlo jeste omylem to tema zamcit..psal jsem tam toto:
LOAD DATA LOCAL INFILE neni povolen, localhost take nefynguje jak mi poradili z hostingu. Zkoousel jsem nevytvaren perzistentni pripojeni a pouzil jen mysql_query misto unbufered_query ale stale nic. A pritom veskere ostatni skripty funguji ok(vyuzivaji ten samy skript pro pripojeni).. |
||
TomášK Profil |
#22 · Zasláno: 22. 6. 2009, 16:19:22
Technické:
* zakládat nové téma asi bylo zbytečné * založit téma s názvem nevysvětlitelný problém je rovněž zbytečné, neb nelze očekávat, že ti podstatu problému někdo vysvětlí, vzhledem k jeho nevysvětlitelnosti :) K dotazu: * % je zástupný znak pro jméno serveru * můžeš mít různá práva, pokud tam zadáš jméno serveru přímo 'linux15.ignum.cz' nebo pokud tam zadáš 'localhost'. * perzistentní nebo ne, je úplně jedno - jde o práva nastavená v databázi a nezáleží na tom, jak se připojíš * je úplně jedno, jakou tomu dáš cestu, jestli k souboru máš práva nebo ne. On se ten soubor ani nepokouší najít - zjistí, že nemáš právo otevírat soubory, tak tě utne. Až postoupíme o krok dál a on se bude pokoušet číst ten soubor, bude to důležité. Teď ne. * co znamená LOAD DATA LOCAL není povolen? dej sem chybovou hlášku. Možná by stačilo spouštět myslq s parametrem --local-infile. Jak toho docílit v php nevím, ale pokud máš povolen vzdálený přístup, pak by to mohlo jít. * napiš sem výstupy dotazů, spuštěné s přihlášením jako localhost a spuštěné s přihlášením jako 'linux15.ignum.cz' show variables like 'local%'; SHOW GRANTS; |
||
gardener Profil |
#23 · Zasláno: 22. 6. 2009, 16:59:57
Tak
u IP:192.168.1.81 hlaska=Access denied for user 'nejakyweb.cz'@'%' (using password: YES) u 217.31.49.81 hlaska=Access denied for user 'nejakyweb.cz'@'%' (using password: YES) u "localhost" hlaska=Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2) in /data/web/virtuals/domena.cz/www/subdomena-alfa/db_connect.php on line 19 * co znamená LOAD DATA LOCAL není povolen?: to znamená hlášku ve smyslu This MySQL function isn't allowed.... kdyz jsem zkusil zadat SHOW GRANTS pro IP 192.168.1.81 dostal jsem: GRANT USAGE ON *.* TO 'nejakyweb.cz'@'%' IDENTIFIED BY PASSWORD '7c5108237c6f473e' GRANT ALL PRIVILEGES ON `nejakyweb.cz`.* TO 'nejakyweb.cz'@'%' a pro SHOW VARIABLES LIKE 'local%'; local_infile OFF |
||
gardener Profil |
#24 · Zasláno: 22. 6. 2009, 18:06:37
Tak jsem to nevydrzel a smiril jsem se s tim, ze na Ignum asi s touto fci nepochodim..
Udelal jsem to tedy prasacky pomoci fgetcsv,while a insert into, kazdopadne to funguje jak ma a na prvni pokus.. Diky vsem za rady. |
||
TomášK Profil |
#25 · Zasláno: 22. 6. 2009, 18:34:13
Tohle podle mě znamená, že v současném stavu LOAD DATA nedokážeš použít - ani s LOCAL, ani bez.
* pro LOCAL bys potřeboval MySQL server spuštěný s --local-infile=0, možné hrozby jsou na http://dev.mysql.com/doc/refman/5.1/en/load-data-local.html * pro LOAD DATA bez LOCAL bys potřeboval mít přístup k souborům - viz http://dev.mysql.com/doc/refman/5.1/en/privileges-provided.html#priv_file Pro obojí bys potřeboval spolupráci ze strany hostingu a vzhledem k tomu, co se píše v tom prvním článku, bych nečekal, že ti to umožní - zvlášť je-li to freeserver. Pokud by někdo mohl potvrdit mé teorie, nebude to naškodu . |
||
Časová prodleva: 15 let
|
0