25# include <openssl/ssl.h>
61typedef struct _php_ftp_object {
66static inline zend_object *ftp_object_to_zend_object(php_ftp_object *obj) {
70static inline php_ftp_object *ftp_object_from_zend_object(
zend_object *
zobj) {
71 return ((php_ftp_object*)(
zobj + 1)) - 1;
75 php_ftp_object *obj = zend_object_alloc(
sizeof(php_ftp_object), ce);
80 zobj->handlers = &ftp_object_handlers;
86 zend_throw_error(
NULL,
"Cannot directly construct FTP\\Connection, use ftp_connect() or ftp_ssl_connect() instead");
91 php_ftp_object *obj = ftp_object_from_zend_object(
zobj);
102 php_ftp_ce = register_class_FTP_Connection();
108 ftp_object_handlers.
free_obj = ftp_object_destroy;
111 register_ftp_symbols(module_number);
128#define XTYPE(xtype, mode) { \
129 if (mode != FTPTYPE_ASCII && mode != FTPTYPE_IMAGE) { \
130 zend_argument_value_error(4, "must be either FTP_ASCII or FTP_BINARY"); \
150 if (timeout_sec <= 0) {
156 if (!(ftp =
ftp_open(host, (
short)port, timeout_sec))) {
187 if (timeout_sec <= 0) {
193 if (!(ftp =
ftp_open(host, (
short)port, timeout_sec))) {
209#define GET_FTPBUF(ftpbuf, zftp) \
210 ftpbuf = ftp_object_from_zend_object(Z_OBJ_P(zftp))->ftp; \
212 zend_throw_exception(zend_ce_value_error, "FTP\\Connection is already closed", 0); \
222 size_t user_len, pass_len;
227 GET_FTPBUF(ftp, z_ftp);
251 GET_FTPBUF(ftp, z_ftp);
273 GET_FTPBUF(ftp, z_ftp);
297 GET_FTPBUF(ftp, z_ftp);
322 GET_FTPBUF(ftp, z_ftp);
347 GET_FTPBUF(ftp, z_ftp);
366 GET_FTPBUF(ftp, z_ftp);
391 GET_FTPBUF(ftp, z_ftp);
417 GET_FTPBUF(ftp, z_ftp);
441 GET_FTPBUF(ftp, z_ftp);
462 char **nlist, **
ptr, *
dir;
468 GET_FTPBUF(ftp, z_ftp);
488 char **llist, **
ptr, *
dir;
495 GET_FTPBUF(ftp, z_ftp);
515 char **llist, **
ptr, *
dir;
522 GET_FTPBUF(ftp, z_ftp);
553 GET_FTPBUF(ftp, z_ftp);
569 zval *z_ftp, *z_file;
580 GET_FTPBUF(ftp, z_ftp);
599 if (!
ftp_get(ftp, stream,
file, file_len, xtype, resumepos)) {
613 zval *z_ftp, *z_file;
624 GET_FTPBUF(ftp, z_ftp);
668 GET_FTPBUF(ftp, z_ftp);
685 char *local, *remote;
686 size_t local_len, remote_len;
692 GET_FTPBUF(ftp, z_ftp);
706 if (outstream ==
NULL) {
709 if (outstream !=
NULL) {
722 if (outstream ==
NULL) {
727 if (!
ftp_get(ftp, outstream, remote, remote_len, xtype, resumepos)) {
748 char *local, *remote;
749 size_t local_len, remote_len;
756 GET_FTPBUF(ftp, z_ftp);
768 if (outstream ==
NULL) {
771 if (outstream !=
NULL) {
784 if (outstream ==
NULL) {
822 GET_FTPBUF(ftp, z_ftp);
851 zval *z_ftp, *z_file;
862 GET_FTPBUF(ftp, z_ftp);
874 startpos =
ftp_size(ftp, remote, remote_len);
884 if (!
ftp_put(ftp, remote, remote_len, stream, xtype, startpos)) {
898 zval *z_ftp, *z_file;
910 GET_FTPBUF(ftp, z_ftp);
922 startpos =
ftp_size(ftp, remote, remote_len);
954 char *remote, *local;
955 size_t remote_len, local_len;
962 GET_FTPBUF(ftp, z_ftp);
977 startpos =
ftp_size(ftp, remote, remote_len);
987 if (!
ftp_put(ftp, remote, remote_len, instream, xtype, startpos)) {
1006 char *remote, *local;
1007 size_t remote_len, local_len;
1014 GET_FTPBUF(ftp, z_ftp);
1021 if (!
ftp_append(ftp, remote, remote_len, instream, xtype)) {
1040 char *remote, *local;
1041 size_t remote_len, local_len;
1048 GET_FTPBUF(ftp, z_ftp);
1063 startpos =
ftp_size(ftp, remote, remote_len);
1077 ret =
ftp_nb_put(ftp, remote, remote_len, instream, xtype, startpos);
1103 GET_FTPBUF(ftp, z_ftp);
1121 GET_FTPBUF(ftp, z_ftp);
1134 size_t src_len, dest_len;
1139 GET_FTPBUF(ftp, z_ftp);
1142 if (!
ftp_rename(ftp, src, src_len, dest, dest_len)) {
1164 GET_FTPBUF(ftp, z_ftp);
1189 GET_FTPBUF(ftp, z_ftp);
1192 if (!
ftp_site(ftp, cmd, cmd_len)) {
1207 php_ftp_object *obj;
1208 bool success =
true;
1214 obj = ftp_object_from_zend_object(
Z_OBJ_P(z_ftp));
1228 zval *z_ftp, *z_value;
1235 GET_FTPBUF(ftp, z_ftp);
1284 GET_FTPBUF(ftp, z_ftp);
file(string $filename, int $flags=0, $context=null)
dir(string $directory, $context=null)
int ftp_delete(ftpbuf_t *ftp, const char *path, const size_t path_len)
int ftp_rename(ftpbuf_t *ftp, const char *src, const size_t src_len, const char *dest, const size_t dest_len)
int ftp_append(ftpbuf_t *ftp, const char *path, const size_t path_len, php_stream *instream, ftptype_t type)
time_t ftp_mdtm(ftpbuf_t *ftp, const char *path, const size_t path_len)
int ftp_get(ftpbuf_t *ftp, php_stream *outstream, const char *path, const size_t path_len, ftptype_t type, zend_long resumepos)
int ftp_put(ftpbuf_t *ftp, const char *path, const size_t path_len, php_stream *instream, ftptype_t type, zend_long startpos)
int ftp_nb_get(ftpbuf_t *ftp, php_stream *outstream, const char *path, const size_t path_len, ftptype_t type, zend_long resumepos)
char ** ftp_list(ftpbuf_t *ftp, const char *path, const size_t path_len, int recursive)
int ftp_mlsd_parse_line(HashTable *ht, const char *input)
const char * ftp_syst(ftpbuf_t *ftp)
zend_string * ftp_mkdir(ftpbuf_t *ftp, const char *dir, const size_t dir_len)
int ftp_cdup(ftpbuf_t *ftp)
int ftp_site(ftpbuf_t *ftp, const char *cmd, const size_t cmd_len)
char ** ftp_nlist(ftpbuf_t *ftp, const char *path, const size_t path_len)
char ** ftp_mlsd(ftpbuf_t *ftp, const char *path, const size_t path_len)
ftpbuf_t * ftp_close(ftpbuf_t *ftp)
int ftp_login(ftpbuf_t *ftp, const char *user, const size_t user_len, const char *pass, const size_t pass_len)
int ftp_chdir(ftpbuf_t *ftp, const char *dir, const size_t dir_len)
int ftp_nb_continue_read(ftpbuf_t *ftp)
int ftp_rmdir(ftpbuf_t *ftp, const char *dir, const size_t dir_len)
ftpbuf_t * ftp_open(const char *host, short port, zend_long timeout_sec)
int ftp_quit(ftpbuf_t *ftp)
int ftp_nb_continue_write(ftpbuf_t *ftp)
int ftp_alloc(ftpbuf_t *ftp, const zend_long size, zend_string **response)
const char * ftp_pwd(ftpbuf_t *ftp)
int ftp_chmod(ftpbuf_t *ftp, const int mode, const char *filename, const int filename_len)
int ftp_exec(ftpbuf_t *ftp, const char *cmd, const size_t cmd_len)
int ftp_nb_put(ftpbuf_t *ftp, const char *path, const size_t path_len, php_stream *instream, ftptype_t type, zend_long startpos)
void ftp_raw(ftpbuf_t *ftp, const char *cmd, const size_t cmd_len, zval *return_value)
int ftp_pasv(ftpbuf_t *ftp, int pasv)
zend_long ftp_size(ftpbuf_t *ftp, const char *path, const size_t path_len)
#define FTP_DEFAULT_TIMEOUT
#define FTP_DEFAULT_USEPASVADDRESS
#define FTP_DEFAULT_AUTOSEEK
ftp_connect(string $hostname, int $port=21, int $timeout=90)
ftp_nb_fget(FTP\Connection $ftp, $stream, string $remote_filename, int $mode=FTP_BINARY, int $offset=0)
ftp_set_option(FTP\Connection $ftp, int $option, $value)
ftp_get_option(FTP\Connection $ftp, int $option)
ftp_fget(FTP\Connection $ftp, $stream, string $remote_filename, int $mode=FTP_BINARY, int $offset=0)
ftp_ssl_connect(string $hostname, int $port=21, int $timeout=90)
ftp_rawlist(FTP\Connection $ftp, string $directory, bool $recursive=false)
ftp_nb_fput(FTP\Connection $ftp, string $remote_filename, $stream, int $mode=FTP_BINARY, int $offset=0)
ftp_systype(FTP\Connection $ftp)
ftp_fput(FTP\Connection $ftp, string $remote_filename, $stream, int $mode=FTP_BINARY, int $offset=0)
ftp_nb_continue(FTP\Connection $ftp)
#define pass(a, b, c, mul)
PHPAPI ZEND_COLD void php_error_docref(const char *docref, int type, const char *format,...)
php_info_print_table_start()
php_info_print_table_row(2, "PDO Driver for Firebird", "enabled")
php_info_print_table_end()
#define PHP_MINIT_FUNCTION
#define PHP_MINFO_FUNCTION
#define PHP_FTP_AUTORESUME
#define PHP_FTP_OPT_USEPASVADDRESS
zend_module_entry php_ftp_module_entry
#define PHP_FTP_OPT_AUTOSEEK
#define PHP_FTP_OPT_TIMEOUT_SEC
struct _php_stream php_stream
#define php_stream_from_zval(xstr, pzval)
#define php_stream_seek(stream, offset, whence)
#define php_stream_close(stream)
#define php_stream_tell(stream)
#define php_stream_from_res(xstr, res)
#define php_stream_open_wrapper(path, mode, options, opened)
zend_object *(* create_object)(zend_class_entry *class_type)
zend_object_free_obj_t free_obj
zend_object_get_constructor_t get_constructor
zend_object_clone_obj_t clone_obj
ZEND_API ZEND_COLD void zend_throw_error(zend_class_entry *exception_ce, const char *format,...)
ZEND_API const char * zend_zval_value_name(const zval *arg)
ZEND_API zend_result object_init_ex(zval *arg, zend_class_entry *class_type)
ZEND_API zend_result zend_parse_parameters(uint32_t num_args, const char *type_spec,...)
ZEND_API void object_properties_init(zend_object *object, zend_class_entry *class_type)
ZEND_API ZEND_COLD void zend_argument_value_error(uint32_t arg_num, const char *format,...)
ZEND_API ZEND_COLD void zend_argument_type_error(uint32_t arg_num, const char *format,...)
ZEND_API zend_result add_next_index_string(zval *arg, const char *str)
#define ZEND_GET_MODULE(name)
#define ZEND_TRY_ASSIGN_REF_STR(zv, str)
union _zend_function zend_function
ZEND_API zval *ZEND_FASTCALL zend_hash_next_index_insert(HashTable *ht, zval *pData)
struct _zend_string zend_string
struct _zend_module_entry zend_module_entry
#define STANDARD_MODULE_PROPERTIES
#define STANDARD_MODULE_HEADER_EX
ZEND_API const zend_object_handlers std_object_handlers
ZEND_API void ZEND_FASTCALL zend_object_std_init(zend_object *object, zend_class_entry *ce)
ZEND_API void zend_object_std_dtor(zend_object *object)
#define XtOffsetOf(s_type, field)
struct _zend_class_entry zend_class_entry
struct _zend_object zend_object
#define Z_ARRVAL_P(zval_p)
struct _zend_object_handlers zend_object_handlers
ZEND_API void zval_ptr_dtor(zval *zval_ptr)
#define VCWD_UNLINK(path)