|  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
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
Welcome back! If you're the original bug submitter, here's where you can edit the bug or add additional notes.
If this is not your bug, you can add a comment by following this link.
If this is your bug, but you forgot your password, you can retrieve your password here.
Bug Type:
From: stratflow at hotmail dot com
New email:
PHP Version: OS:


 [2014-11-20 13:26 UTC] stratflow at hotmail dot com
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
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.

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


Add a Patch

Pull Requests

Add a Pull Request


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:
 [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:

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

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-2020 The PHP Group
All rights reserved.
Last updated: Thu Dec 03 19:01:24 2020 UTC