php.net |  support |  documentation |  report a bug |  advanced search |  search howto |  statistics |  random bug |  login
Request #68462 ftp-put: debugging fail after "PORT command successful"
Submitted: 2014-11-20 13:26 UTC Modified: 2014-11-20 16:46 UTC
Votes:4
Avg. Score:4.5 ± 0.9
Reproduced:2 of 3 (66.7%)
Same Version:1 (50.0%)
Same OS:0 (0.0%)
From: stratflow at hotmail dot com Assigned:
Status: Open Package: FTP related
PHP Version: 5.4.35 OS: FreeBSD 9.2-RELEASE-p10
Private report: No CVE-ID: None
View Add Comment Developer Edit
Welcome! If you don't have a Git account, you can't do anything here.
You can add a comment by following this link or if you reported this bug, you can edit this bug over here.
(description)
Block user comment
Status: Assign to:
Package:
Bug Type:
Summary:
From: stratflow at hotmail dot com
New email:
PHP Version: OS:

 

 [2014-11-20 13:26 UTC] stratflow at hotmail dot com
Description:
------------
ftp_put() in some cases returns FALSE after transfer of a file.
The last logged error in $php_errormsg is 
  "ftp_put() [function.ftp-put.php]: PORT command successful"

It is unclear if this is a problem within PHP:FTP, a clientside filesystem problem or a serverside problem.

The same script runs 100 transfers every 15 mins from one server off to different platforms of different flavours. We have recently encountered a HUGE increase of these errors which would indicate a problem in the source system.

As far as we can see, there is no (documented?) way to debug this problems and look into the server responses. There was one proposal how to solve something like this in
  https://bugs.php.net/bug.php?id=44059
but that never made it into the tree.






Test script:
---------------

$ftp         = ftp_connect($ftphost,21,15);
$ftp_login   = ftp_login($ftp, $ftpuser, $ftppass);
$ftp_pasv    = ftp_pasv($ftp, true);

$ftp_up      = ftp_put($ftp, $trgfile, $srcfile, FTP_BINARY); 

# now check upload status:
if (!$ftp_up) { 
  print "upload check failed [" . $php_errormsg . "]<";
} else {
  print "upload successful";
}




Expected result:
----------------
Access to some sort of log of last server messages.



Note: 
The last erromessage in php_errormsg is might be misleading.

Note 2:
Unless you're transferring to a server to which you have ftp-logfile access, it's impossible to debug this from the serverside.



Actual result:
--------------
ftp_put() returns FALSE for undebuggable reason.

Misleading or unclear messages in $php_errormsg

Patches

Add a Patch

Pull Requests

Add a Pull Request

History

AllCommentsChangesGit/SVN commitsRelated reports
 [2014-11-20 13:41 UTC] stratflow at hotmail dot com
In addition, the following, ambiguious warnings might get issued:

Warning: ftp_put() [function.ftp-put.php]: php_connect_nonb() failed: Operation now in progress (36) in xxxxx.php on line xxx

Warning: ftp_put() [function.ftp-put.php]: Type set to I in xxxxx.php on line xxx
 [2014-11-20 14:45 UTC] stratflow at hotmail dot com
Further digging lead to a patch that was never accepted and might address a component of this issue:

https://bugs.php.net/bug.php?id=55651
[http://www.elitehosts.com/blog/php-ftp-passive-ftp-server-behind-nat-nightmare/]
 [2014-11-20 16:46 UTC] stratflow at hotmail dot com
Even further digging lead to E_WARNINGs:

call to ftp_put() in troubleful cases trigger this sequence of warnings:

------------------------------------------------
[#2] E_WARNING
ftp_put() [function.ftp-put.php]: php_connect_nonb() failed: Operation now in progress (36)

[#2] E_WARNING
ftp_put() [function.ftp-put.php]: Entering Passive Mode (92,42,188,103,192,0).
------------------------------------------------

looking at $php_errormsg after ftp_put(), only the last message (Entering Passive Mode) is recorded. This is misleading. In fact, php_connect_nonb() had already failed and should trigger a proper response!
 
PHP Copyright © 2001-2019 The PHP Group
All rights reserved.
Last updated: Thu Nov 14 16:01:42 2019 UTC