Avatar billede jojossdk Nybegynder
16. april 2012 - 20:59 Der er 30 kommentarer og
1 løsning

hvad skyldes denne fejl?

Hej eksperter

jeg skal have sendt nogle .txt filer fra en mappe i mit webhotel til en anden FTP server, men få en fejl når jeg kører scriptet.

php filen ligge i samme mappe som txt filerne.

koden ser sådan ud :


<?php
$server = 'ftp.domæne.dk';
$ftp_user_name = 'brugernavn';
$ftp_user_pass = 'kode';
$dest = '.';
$sourse = '.';
$mode = 'FTP_ASCII';



  $connection = ftp_connect($server);

  $login = ftp_login($connection, $ftp_user_name, $ftp_user_pass);

  if (!$connection || !$login) { die('Connection attempt failed!'); }

  $upload = ftp_put($connection, $dest, $source, $mode);

  if (!$upload) { echo 'FTP upload failed!'; }

  ftp_close($connection);
?>

Det er denne fejl:

Warning: ftp_put() expects parameter 4 to be long, string given in /home/www/domænet.dk/mappe/sendfil.php on line 17
FTP upload failed!


Kan i hjælpe mig?
Avatar billede danco Nybegynder
16. april 2012 - 21:08 #1
din $mode skal være : FTP_ASCII og ikke 'FTP_ASCII'

FTP_ASCII ser for mig ud til at være en konstant der indeholder en long værdi.
Avatar billede jojossdk Nybegynder
16. april 2012 - 21:16 #2
Det hjælper ikke noget
Avatar billede danco Nybegynder
16. april 2012 - 21:43 #3
$upload = ftp_put($connection, $dest, $sourse, FTP_ASCII);

nu har jeg lige ændre en taste fejl i din source fil også ;)
måske det rent faktisk hjælper.

Har du tjekket at du rent faktisk har skrive adgang til FTP serveren via et script og det så derfor ikke bare er serveren der afviser filen.
Avatar billede jojossdk Nybegynder
16. april 2012 - 21:49 #4
hvordan tjekker jeg det?
Avatar billede jojossdk Nybegynder
16. april 2012 - 21:51 #5
nu får jeg denne fejl når jeg har udskiftet den linje du har skrevet

Warning: ftp_put() [function.ftp-put]: Filename cannot be empty in /home/www/domæne.dk/mappe/sendfil.php on line 15
FTP upload failed!
Avatar billede danco Nybegynder
16. april 2012 - 21:53 #6
Dine filer er jo heller ikke defineret i dine variable?
Det skal være en relativ sti antager jeg.

mappe1/mappe2/fil.jpg
Avatar billede jojossdk Nybegynder
16. april 2012 - 21:56 #7
det skal lige siger at jeg senere skal sætte php filen til at kører i et cronjob hver time. dette styret fra kontrolpanelet i Webhotellet.

der kommer heletiden txt filer ind som skal sendes videre, og de har ikke samme filnanvn!
Avatar billede olebole Juniormester
16. april 2012 - 22:00 #8
<ole>

Så må du lade cronjob scriptet finde filnavnet på txt-filen

/mvh
</bole>
Avatar billede jojossdk Nybegynder
16. april 2012 - 22:14 #9
Det kan jeg ikke, det tilbyder gigahost ikke.
Avatar billede olebole Juniormester
16. april 2012 - 22:19 #10
Det må du nok forklare. Hvad tilbyder GigaHost ikke?
Avatar billede olebole Juniormester
16. april 2012 - 22:21 #11
Hvis GigaHost tilbyder at afvikle et script via et cronjob, må det script vel også kunne finde navnet på en eller flere filer  =)
Avatar billede danco Nybegynder
16. april 2012 - 22:23 #12
Gigahost har da cronjob? - så hvad er det de ikke tilbyder som du skal bruge?

En løsning kunne være at have en database tabel til at holde navnet på alle de filer der ER overført så du har noget at sorterer fra i dine filer.

Men første priotet må være det som spørgsmålet omhandler, at kunne uploade til en ekstern ftp server.
Lav evt. en test hvor du "hardcoder" en filsti som du overfører.
Avatar billede jojossdk Nybegynder
16. april 2012 - 22:25 #13
se linket her.
der er ikke mange indstillinger for cronjob hos gigahost
http://support.gigahost.dk/?p=54

så det script skal nemlig finde navn på filen/filerne som skal sendes videre.
Avatar billede olebole Juniormester
16. april 2012 - 22:28 #14
Så forstår jeg ikke, hvad vi taler om ...? "det skal lige siger at jeg senere skal sætte php filen til at kører i et cronjob hver time. dette styret fra kontrolpanelet i Webhotellet."
Avatar billede olebole Juniormester
16. april 2012 - 22:30 #15
Det script, du er ved at skrive, skal også finde navnene på filerne. Hvorfor kan det ikke lade sig gøre hos GigaHost?
Avatar billede danco Nybegynder
16. april 2012 - 22:31 #16
Skal vi nu ikke lige blive enige om at et script der afvikles af et cronjob skal have sine informationer via GET parametre som så er statiske eller hente andre steder fra. Der er ikke mulighed for noget input af nogen art.
Jeg forstår ikke hvilke indstillinger du har behov for. Du kan instille intervallerne helt ned til 1 time mellemrum.

Under alle omstændigheder er cronjob irrelevant lige pt. Først og fremmest skal du kunne overføre til en anden ftp server.. Hvordan det så gøres derefter er næste problematik.
Avatar billede danco Nybegynder
16. april 2012 - 22:32 #17
Det kan det også godt Ole.
jeg er selv hos gigahost og generelt har du alle muligheder hos dem idet du selv kan stille php.ini mv.

Så der er ingen IO begrænsninger lige der.
Avatar billede jojossdk Nybegynder
16. april 2012 - 22:35 #18
dette script skal automatisk uploade alle indkommet txt filer, hver time.

for at få det script til at "kører" hver time skal det styres af et cronjob.

derfor skal jeg bare have dette script til at virke manuelt, da gigahost har en funktion som tilbyder cronjob, man skal bare angive hvilken php fil det er på ens server og hvor tit den skal "kører"
Avatar billede jojossdk Nybegynder
16. april 2012 - 22:37 #19
mit seneste svar var til ole
Avatar billede olebole Juniormester
16. april 2012 - 22:39 #20
Sorry, men jeg forstår stadig ikke problemet  =)
Avatar billede olebole Juniormester
16. april 2012 - 22:41 #21
- og det er vel at mærke hverken fordi, jeg ikke kender til cronjobs eller GigaHost  =)
Avatar billede danco Nybegynder
16. april 2012 - 22:41 #22
Det du gør nu er at du får lavet et script der kan overføre én fil ud fra tankengangen at hvis den kan overføre én fil, så kan det nok også overføre flere.

Det du så skal bruge er en måde at finde ud af hvilke filer der allerede tidligere er blevet overført, det kunne passende være en database tabel så den har muligheden for at sortere de filer fra inden den begynder at overføre.

Hvis jeg var dig ville jeg lave en test.txt fil som jeg ville forsøge at overføre til den anden server.


<?php
$server = 'ftp.domæne.dk';
$ftp_user_name = 'brugernavn';
$ftp_user_pass = 'kode';
$dest = '/destinationFolder/';
$sourse = 'test.txt';



  $connection = ftp_connect($server);

  $login = ftp_login($connection, $ftp_user_name, $ftp_user_pass);

  if (!$connection || !$login) { die('Connection attempt failed!'); }

  $upload = ftp_put($connection, $dest, $sourse, FTP_ASCII);

  if (!$upload) { echo 'FTP upload failed!'; }

  ftp_close($connection);
?>
Avatar billede jojossdk Nybegynder
16. april 2012 - 22:42 #23
ole:

tænk ikke på cronjob, dette script skal bare virker når jeg skriver det i browseren.

og pt virker det ikke.
Avatar billede jojossdk Nybegynder
16. april 2012 - 22:48 #24
nu får jeg denne fejl:

Warning: ftp_put() [function.ftp-put]: Prohibited file name: /destinationFolde/ in /home/www/domæne.dk/mappe/sendfil.php on line 16
FTP upload failed!
Avatar billede olebole Juniormester
16. april 2012 - 22:48 #25
Det var dig selv, der nævnte et cronjob - og jeg er sådan set ligeglad med, om det skal afvikles via et cronjob eller ej. Det betyder ikke noget for den del af virkemåden.

Du skal have dette script til at finde ud af, hvad txt-filen hedder og derefter sende den til den anden FTP-server.

@danco: $dest skal også være et filnavn
Avatar billede danco Nybegynder
16. april 2012 - 22:52 #26
Nå for søren :)
Jamen så er det vel bare at smide filnavnet bagefter. Det var jeg ikke lige opmærksom på.

og det fordrer jo naturligvis at du ved præcis hvilken mappe de skal ligge i på FTP serveren, men mon ikke du gør det når du har adgang til den.
Avatar billede jojossdk Nybegynder
16. april 2012 - 22:53 #27
Ole har ret!

nu virker det med en fast fil!


<?php
$server = 'ftp.domæne.dk';
$ftp_user_name = 'brugernavn';
$ftp_user_pass = 'kode';
$dest = '/destinationFolder/test.txt';
$sourse = 'test.txt';



  $connection = ftp_connect($server);

  $login = ftp_login($connection, $ftp_user_name, $ftp_user_pass);

  if (!$connection || !$login) { die('Connection attempt failed!'); }

  $upload = ftp_put($connection, $dest, $sourse, FTP_ASCII);

  if (!$upload) { echo 'FTP upload failed!'; }

  ftp_close($connection);
?>
Avatar billede danco Nybegynder
16. april 2012 - 23:08 #28
Super!
Så skal du bare løbe alle filerne i mappen igennem og afgøre om den allerede er overført.

Hvis det var mig ville jeg nok vælge at lave en databasetabel der der nogenlunde således ud:

id - originalPath - distinationPath - stamp

og så logge hvilke filer du har overført i tidligere gennemløb.
Du skal dog være opmærksom på den maksimale execution time for et script (mener det er 5 min. hos gigahost), så du skal nok lave en form for timer.
Avatar billede jojossdk Nybegynder
16. april 2012 - 23:12 #29
danco smid et svar så får du dine point
Avatar billede danco Nybegynder
17. april 2012 - 06:52 #30
Her får du et svar fra mig
Avatar billede The_Buzz Novice
17. april 2012 - 08:50 #31
Interessant læsning...

Jeg gør det selv med en cronjob (og et andet script) der kopierer en tar.gz fil på en eksternal server.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester