📄 php_ftp.c
字号:
RETURN_TRUE;}/* }}} *//* {{{ proto bool ftp_nb_fput(resource stream, string remote_file, resource fp, int mode[, int startpos]) Stores a file from an open file to the FTP server nbronly */PHP_FUNCTION(ftp_nb_fput){ zval *z_ftp, *z_file; ftpbuf_t *ftp; ftptype_t xtype; int remote_len, ret; long mode, startpos=0; php_stream *stream; char *remote; if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rsrl|l", &z_ftp, &remote, &remote_len, &z_file, &mode, &startpos) == FAILURE) { return; } ZEND_FETCH_RESOURCE(ftp, ftpbuf_t*, &z_ftp, -1, le_ftpbuf_name, le_ftpbuf); php_stream_from_zval(stream, &z_file); XTYPE(xtype, mode); /* ignore autoresume if autoseek is switched off */ if (!ftp->autoseek && startpos == PHP_FTP_AUTORESUME) { startpos = 0; } if (ftp->autoseek && startpos) { /* if autoresume is wanted ask for remote size */ if (startpos == PHP_FTP_AUTORESUME) { startpos = ftp_size(ftp, remote); if (startpos < 0) { startpos = 0; } } if (startpos) { php_stream_seek(stream, startpos, SEEK_SET); } } /* configuration */ ftp->direction = 1; /* send */ ftp->closestream = 0; /* do not close */ if (((ret = ftp_nb_put(ftp, remote, stream, xtype, startpos TSRMLS_CC)) == PHP_FTP_FAILED)) { php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s", ftp->inbuf); RETURN_LONG(ret); } RETURN_LONG(ret);}/* }}} *//* {{{ proto bool ftp_put(resource stream, string remote_file, string local_file, int mode[, int startpos]) Stores a file on the FTP server */PHP_FUNCTION(ftp_put){ zval *z_ftp; ftpbuf_t *ftp; ftptype_t xtype; char *remote, *local; int remote_len, local_len; long mode, startpos=0; php_stream * instream; if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rssl|l", &z_ftp, &remote, &remote_len, &local, &local_len, &mode, &startpos) == FAILURE) { return; } ZEND_FETCH_RESOURCE(ftp, ftpbuf_t*, &z_ftp, -1, le_ftpbuf_name, le_ftpbuf); XTYPE(xtype, mode); if (php_check_open_basedir(local TSRMLS_CC)) { RETURN_FALSE; } if (PG(safe_mode) && (!php_checkuid(local, mode == FTPTYPE_ASCII ? "rt" : "rb", CHECKUID_CHECK_MODE_PARAM))) { RETURN_FALSE; } instream = php_stream_fopen(local, mode == FTPTYPE_ASCII ? "rt" : "rb", NULL); if (instream == NULL) { RETURN_FALSE; } /* ignore autoresume if autoseek is switched off */ if (!ftp->autoseek && startpos == PHP_FTP_AUTORESUME) { startpos = 0; } if (ftp->autoseek && startpos) { /* if autoresume is wanted ask for remote size */ if (startpos == PHP_FTP_AUTORESUME) { startpos = ftp_size(ftp, remote); if (startpos < 0) { startpos = 0; } } if (startpos) { php_stream_seek(instream, startpos, SEEK_SET); } } if (!ftp_put(ftp, remote, instream, xtype, startpos)) { php_stream_close(instream); php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s", ftp->inbuf); RETURN_FALSE; } php_stream_close(instream); RETURN_TRUE;}/* }}} *//* {{{ proto bool ftp_nb_put(resource stream, string remote_file, string local_file, int mode[, int startpos]) Stores a file on the FTP server */PHP_FUNCTION(ftp_nb_put){ zval *z_ftp; ftpbuf_t *ftp; ftptype_t xtype; char *remote, *local; int remote_len, local_len, ret; long mode, startpos=0; php_stream * instream; if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rssl|l", &z_ftp, &remote, &remote_len, &local, &local_len, &mode, &startpos) == FAILURE) { return; } ZEND_FETCH_RESOURCE(ftp, ftpbuf_t*, &z_ftp, -1, le_ftpbuf_name, le_ftpbuf); XTYPE(xtype, mode); if (php_check_open_basedir(local TSRMLS_CC)) { RETURN_FALSE; } if (PG(safe_mode) && (!php_checkuid(local, mode == FTPTYPE_ASCII ? "rt" : "rb", CHECKUID_CHECK_MODE_PARAM))) { RETURN_FALSE; } instream = php_stream_fopen(local, mode == FTPTYPE_ASCII ? "rt" : "rb", NULL); if (instream == NULL) { RETURN_FALSE; } /* ignore autoresume if autoseek is switched off */ if (!ftp->autoseek && startpos == PHP_FTP_AUTORESUME) { startpos = 0; } if (ftp->autoseek && startpos) { /* if autoresume is wanted ask for remote size */ if (startpos == PHP_FTP_AUTORESUME) { startpos = ftp_size(ftp, remote); if (startpos < 0) { startpos = 0; } } if (startpos) { php_stream_seek(instream, startpos, SEEK_SET); } } /* configuration */ ftp->direction = 1; /* send */ ftp->closestream = 1; /* do close */ ret = ftp_nb_put(ftp, remote, instream, xtype, startpos TSRMLS_CC); if (ret != PHP_FTP_MOREDATA) { php_stream_close(instream); } if (ret == PHP_FTP_FAILED) { php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s", ftp->inbuf); } RETURN_LONG(ret);}/* }}} *//* {{{ proto int ftp_size(resource stream, string filename) Returns the size of the file, or -1 on error */PHP_FUNCTION(ftp_size){ zval *z_ftp; ftpbuf_t *ftp; char *file; int file_len; if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rs", &z_ftp, &file, &file_len) == FAILURE) { return; } ZEND_FETCH_RESOURCE(ftp, ftpbuf_t*, &z_ftp, -1, le_ftpbuf_name, le_ftpbuf); /* get file size */ RETURN_LONG(ftp_size(ftp, file));}/* }}} *//* {{{ proto int ftp_mdtm(resource stream, string filename) Returns the last modification time of the file, or -1 on error */PHP_FUNCTION(ftp_mdtm){ zval *z_ftp; ftpbuf_t *ftp; char *file; int file_len; if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rs", &z_ftp, &file, &file_len) == FAILURE) { return; } ZEND_FETCH_RESOURCE(ftp, ftpbuf_t*, &z_ftp, -1, le_ftpbuf_name, le_ftpbuf); /* get file mod time */ RETURN_LONG(ftp_mdtm(ftp, file));}/* }}} *//* {{{ proto bool ftp_rename(resource stream, string src, string dest) Renames the given file to a new path */PHP_FUNCTION(ftp_rename){ zval *z_ftp; ftpbuf_t *ftp; char *src, *dest; int src_len, dest_len; if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rss", &z_ftp, &src, &src_len, &dest, &dest_len) == FAILURE) { return; } ZEND_FETCH_RESOURCE(ftp, ftpbuf_t*, &z_ftp, -1, le_ftpbuf_name, le_ftpbuf); /* rename the file */ if (!ftp_rename(ftp, src, dest)) { php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s", ftp->inbuf); RETURN_FALSE; } RETURN_TRUE;}/* }}} *//* {{{ proto bool ftp_delete(resource stream, string file) Deletes a file */PHP_FUNCTION(ftp_delete){ zval *z_ftp; ftpbuf_t *ftp; char *file; int file_len; if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rs", &z_ftp, &file, &file_len) == FAILURE) { return; } ZEND_FETCH_RESOURCE(ftp, ftpbuf_t*, &z_ftp, -1, le_ftpbuf_name, le_ftpbuf); /* delete the file */ if (!ftp_delete(ftp, file)) { php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s", ftp->inbuf); RETURN_FALSE; } RETURN_TRUE;}/* }}} *//* {{{ proto bool ftp_site(resource stream, string cmd) Sends a SITE command to the server */PHP_FUNCTION(ftp_site){ zval *z_ftp; ftpbuf_t *ftp; char *cmd; int cmd_len; if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rs", &z_ftp, &cmd, &cmd_len) == FAILURE) { return; } ZEND_FETCH_RESOURCE(ftp, ftpbuf_t*, &z_ftp, -1, le_ftpbuf_name, le_ftpbuf); /* send the site command */ if (!ftp_site(ftp, cmd)) { php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s", ftp->inbuf); RETURN_FALSE; } RETURN_TRUE;}/* }}} *//* {{{ proto void ftp_close(resource stream) Closes the FTP stream */PHP_FUNCTION(ftp_close){ zval *z_ftp; ftpbuf_t *ftp; if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r", &z_ftp) == FAILURE) { return; } ZEND_FETCH_RESOURCE(ftp, ftpbuf_t*, &z_ftp, -1, le_ftpbuf_name, le_ftpbuf); ftp_quit(ftp); RETURN_BOOL(zend_list_delete(Z_LVAL_P(z_ftp)) == SUCCESS);}/* }}} *//* {{{ proto bool ftp_set_option(resource stream, int option, mixed value) Sets an FTP option */PHP_FUNCTION(ftp_set_option){ zval *z_ftp, *z_value; long option; ftpbuf_t *ftp; if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rlz", &z_ftp, &option, &z_value) == FAILURE) { return; } ZEND_FETCH_RESOURCE(ftp, ftpbuf_t*, &z_ftp, -1, le_ftpbuf_name, le_ftpbuf); switch (option) { case PHP_FTP_OPT_TIMEOUT_SEC: if (Z_TYPE_P(z_value) != IS_LONG) { php_error_docref(NULL TSRMLS_CC, E_WARNING, "Option TIMEOUT_SEC expects value of type long, %s given", zend_zval_type_name(z_value)); RETURN_FALSE; } if (Z_LVAL_P(z_value) <= 0) { php_error_docref(NULL TSRMLS_CC, E_WARNING, "Timeout has to be greater than 0"); RETURN_FALSE; } ftp->timeout_sec = Z_LVAL_P(z_value); RETURN_TRUE; break; case PHP_FTP_OPT_AUTOSEEK: if (Z_TYPE_P(z_value) != IS_BOOL) { php_error_docref(NULL TSRMLS_CC, E_WARNING, "Option AUTOSEEK expects value of type boolean, %s given", zend_zval_type_name(z_value)); RETURN_FALSE; } ftp->autoseek = Z_LVAL_P(z_value); RETURN_TRUE; break; default: php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unknown option '%ld'", option); RETURN_FALSE; break; }}/* }}} *//* {{{ proto mixed ftp_get_option(resource stream, int option) Gets an FTP option */PHP_FUNCTION(ftp_get_option){ zval *z_ftp; long option; ftpbuf_t *ftp; if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rl", &z_ftp, &option) == FAILURE) { return; } ZEND_FETCH_RESOURCE(ftp, ftpbuf_t*, &z_ftp, -1, le_ftpbuf_name, le_ftpbuf); switch (option) { case PHP_FTP_OPT_TIMEOUT_SEC: RETURN_LONG(ftp->timeout_sec); break; case PHP_FTP_OPT_AUTOSEEK: RETURN_BOOL(ftp->autoseek); break; default: php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unknown option '%ld'", option); RETURN_FALSE; break; }}/* }}} */#endif /* HAVE_FTP *//* * Local variables: * tab-width: 4 * c-basic-offset: 4 * indent-tabs-mode: t * End: */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -