⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 php_ftp.c

📁 php-4.4.7学习linux时下载的源代码
💻 C
📖 第 1 页 / 共 3 页
字号:
	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 + -