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

📄 php_ftp.c

📁 php-4.4.7学习linux时下载的源代码
💻 C
📖 第 1 页 / 共 3 页
字号:
	for (ptr = nlist; *ptr; ptr++)		add_next_index_string(return_value, *ptr, 1);	efree(nlist);}/* }}} *//* {{{ proto array ftp_rawlist(resource stream, string directory [, bool recursive])   Returns a detailed listing of a directory as an array of output lines */PHP_FUNCTION(ftp_rawlist){	zval		*z_ftp;	ftpbuf_t	*ftp;	char		**llist, **ptr, *dir;	int			dir_len;	zend_bool	recursive = 0;	if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rs|b", &z_ftp, &dir, &dir_len, &recursive) == FAILURE) {		return;	}	ZEND_FETCH_RESOURCE(ftp, ftpbuf_t*, &z_ftp, -1, le_ftpbuf_name, le_ftpbuf);	/* get raw directory listing */	if (NULL == (llist = ftp_list(ftp, dir, recursive TSRMLS_CC))) {		RETURN_FALSE;	}	array_init(return_value);	for (ptr = llist; *ptr; ptr++)		add_next_index_string(return_value, *ptr, 1);	efree(llist);}/* }}} *//* {{{ proto string ftp_systype(resource stream)   Returns the system type identifier */PHP_FUNCTION(ftp_systype){	zval		*z_ftp;	ftpbuf_t	*ftp;	const char	*syst;	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);	if (NULL == (syst = ftp_syst(ftp))) {		php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s", ftp->inbuf);		RETURN_FALSE;	}	RETURN_STRING((char*) syst, 1);}/* }}} *//* {{{ proto bool ftp_fget(resource stream, resource fp, string remote_file, int mode[, int resumepos])   Retrieves a file from the FTP server and writes it to an open file */PHP_FUNCTION(ftp_fget){	zval		*z_ftp, *z_file;	ftpbuf_t	*ftp;	ftptype_t	xtype;	php_stream	*stream;	char		*file;	int		file_len;	long 		mode, resumepos=0;	if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rrsl|l", &z_ftp, &z_file, &file, &file_len, &mode, &resumepos) == 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 && resumepos == PHP_FTP_AUTORESUME) {		resumepos = 0;	}	if (ftp->autoseek && resumepos) {		/* if autoresume is wanted seek to end */		if (resumepos == PHP_FTP_AUTORESUME) {			php_stream_seek(stream, 0, SEEK_END);			resumepos = php_stream_tell(stream);		} else {			php_stream_seek(stream, resumepos, SEEK_SET);		}	}	if (!ftp_get(ftp, stream, file, xtype, resumepos)) {		php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s", ftp->inbuf);		RETURN_FALSE;	}	RETURN_TRUE;}/* }}} *//* {{{ proto bool ftp_nb_fget(resource stream, resource fp, string remote_file, int mode[, int resumepos])   Retrieves a file from the FTP server asynchronly and writes it to an open file */PHP_FUNCTION(ftp_nb_fget){	zval		*z_ftp, *z_file;	ftpbuf_t	*ftp;	ftptype_t	xtype;	php_stream	*stream;	char		*file;	int		file_len, ret;	long		mode, resumepos=0;	if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rrsl|l", &z_ftp, &z_file, &file, &file_len, &mode, &resumepos) == 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 && resumepos == PHP_FTP_AUTORESUME) {		resumepos = 0;	}	if (ftp->autoseek && resumepos) {		/* if autoresume is wanted seek to end */		if (resumepos == PHP_FTP_AUTORESUME) {			php_stream_seek(stream, 0, SEEK_END);			resumepos = php_stream_tell(stream);		} else {			php_stream_seek(stream, resumepos, SEEK_SET);		}	}	/* configuration */	ftp->direction = 0;   /* recv */	ftp->closestream = 0; /* do not close */	if ((ret = ftp_nb_get(ftp, stream, file, xtype, resumepos 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_pasv(resource stream, bool pasv)   Turns passive mode on or off */PHP_FUNCTION(ftp_pasv){	zval		*z_ftp;	ftpbuf_t	*ftp;	zend_bool	pasv;	if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rb", &z_ftp, &pasv) == FAILURE) {		return;	}	ZEND_FETCH_RESOURCE(ftp, ftpbuf_t*, &z_ftp, -1, le_ftpbuf_name, le_ftpbuf);	if (!ftp_pasv(ftp, pasv ? 1 : 0)) {		RETURN_FALSE;	}	RETURN_TRUE;}/* }}} *//* {{{ proto bool ftp_get(resource stream, string local_file, string remote_file, int mode[, int resume_pos])   Retrieves a file from the FTP server and writes it to a local file */PHP_FUNCTION(ftp_get){	zval		*z_ftp;	ftpbuf_t	*ftp;	ftptype_t	xtype;	php_stream	*outstream;	char		*local, *remote;	int		local_len, remote_len;	long		mode, resumepos=0;	if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rssl|l", &z_ftp, &local, &local_len, &remote, &remote_len, &mode, &resumepos) == FAILURE) {		return;	}	ZEND_FETCH_RESOURCE(ftp, ftpbuf_t*, &z_ftp, -1, le_ftpbuf_name, le_ftpbuf);	XTYPE(xtype, mode);	/* ignore autoresume if autoseek is switched off */	if (!ftp->autoseek && resumepos == PHP_FTP_AUTORESUME) {		resumepos = 0;	}	if (php_check_open_basedir(local TSRMLS_CC)) {		RETURN_FALSE;	}#ifdef PHP_WIN32	mode = FTPTYPE_IMAGE;#endif	if (ftp->autoseek && resumepos) {		if (PG(safe_mode) && (!php_checkuid(local, mode == FTPTYPE_ASCII ? "rt+" : "rb+", CHECKUID_CHECK_MODE_PARAM))) {			RETURN_FALSE;		}		outstream = php_stream_fopen(local, mode == FTPTYPE_ASCII ? "rt+" : "rb+", NULL);		if (outstream == NULL) {			if (PG(safe_mode) && (!php_checkuid(local, mode == FTPTYPE_ASCII ? "wt" : "wb", CHECKUID_CHECK_MODE_PARAM))) {				RETURN_FALSE;			}			outstream = php_stream_fopen(local, mode == FTPTYPE_ASCII ? "wt" : "wb", NULL);		}		if (outstream != NULL) {			/* if autoresume is wanted seek to end */			if (resumepos == PHP_FTP_AUTORESUME) {				php_stream_seek(outstream, 0, SEEK_END);				resumepos = php_stream_tell(outstream);			} else {				php_stream_seek(outstream, resumepos, SEEK_SET);			}		}	} else {		if (PG(safe_mode) && (!php_checkuid(local, mode == FTPTYPE_ASCII ? "wt" : "wb", CHECKUID_CHECK_MODE_PARAM))) {			RETURN_FALSE;		}		outstream = php_stream_fopen(local, mode == FTPTYPE_ASCII ? "wt" : "wb", NULL);	}	if (outstream == NULL)	{		php_error_docref(NULL TSRMLS_CC, E_WARNING, "Error opening %s", local);		RETURN_FALSE;	}	if (!ftp_get(ftp, outstream, remote, xtype, resumepos)) {		php_stream_close(outstream);		VCWD_UNLINK(local);		php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s", ftp->inbuf);		RETURN_FALSE;	}	php_stream_close(outstream);	RETURN_TRUE;}/* }}} *//* {{{ proto int ftp_nb_get(resource stream, string local_file, string remote_file, int mode[, int resume_pos])   Retrieves a file from the FTP server nbhronly and writes it to a local file */PHP_FUNCTION(ftp_nb_get){	zval		*z_ftp;	ftpbuf_t	*ftp;	ftptype_t	xtype;	php_stream	*outstream;	char		*local, *remote;	int		local_len, remote_len, ret;	long		mode, resumepos=0;	if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rssl|l", &z_ftp, &local, &local_len, &remote, &remote_len, &mode, &resumepos) == FAILURE) {		return;	}	ZEND_FETCH_RESOURCE(ftp, ftpbuf_t*, &z_ftp, -1, le_ftpbuf_name, le_ftpbuf);	XTYPE(xtype, mode);	/* ignore autoresume if autoseek is switched off */	if (!ftp->autoseek && resumepos == PHP_FTP_AUTORESUME) {		resumepos = 0;	}	if (php_check_open_basedir(local TSRMLS_CC)) {		RETURN_FALSE;	}	if (ftp->autoseek && resumepos) {		if (PG(safe_mode) && (!php_checkuid(local, mode == FTPTYPE_ASCII ? "rt+" : "rb+", CHECKUID_CHECK_MODE_PARAM))) {			RETURN_FALSE;		}		outstream = php_stream_fopen(local, mode == FTPTYPE_ASCII ? "rt+" : "rb+", NULL);		if (outstream == NULL) {			if (PG(safe_mode) && (!php_checkuid(local, mode == FTPTYPE_ASCII ? "wt" : "wb", CHECKUID_CHECK_MODE_PARAM))) {				RETURN_FALSE;			}			outstream = php_stream_fopen(local, mode == FTPTYPE_ASCII ? "wt" : "wb", NULL);		}		if (outstream != NULL) {			/* if autoresume is wanted seek to end */			if (resumepos == PHP_FTP_AUTORESUME) {				php_stream_seek(outstream, 0, SEEK_END);				resumepos = php_stream_tell(outstream);			} else {				php_stream_seek(outstream, resumepos, SEEK_SET);			}		}	} else {		if (PG(safe_mode) && (!php_checkuid(local, mode == FTPTYPE_ASCII ? "wt" : "wb", CHECKUID_CHECK_MODE_PARAM))) {			RETURN_FALSE;		}		outstream = php_stream_fopen(local, mode == FTPTYPE_ASCII ? "wt" : "wb", NULL);	}	if (outstream == NULL)	{		php_error_docref(NULL TSRMLS_CC, E_WARNING, "Error opening %s", local);		RETURN_FALSE;	}	/* configuration */	ftp->direction = 0;   /* recv */	ftp->closestream = 1; /* do close */	if ((ret = ftp_nb_get(ftp, outstream, remote, xtype, resumepos TSRMLS_CC)) == PHP_FTP_FAILED) {		php_stream_close(outstream);		VCWD_UNLINK(local);		php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s", ftp->inbuf);		RETURN_LONG(PHP_FTP_FAILED);	}	if (ret == PHP_FTP_FINISHED) {		php_stream_close(outstream);	}	RETURN_LONG(ret);}/* }}} *//* {{{ proto int ftp_nb_continue(resource stream)   Continues retrieving/sending a file nbronously */PHP_FUNCTION(ftp_nb_continue){	zval		*z_ftp;	ftpbuf_t	*ftp;	int			ret;	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);	if (!ftp->nb) {		php_error_docref(NULL TSRMLS_CC, E_WARNING, "no nbronous transfer to continue.");		RETURN_LONG(PHP_FTP_FAILED);	}	if (ftp->direction) {		ret=ftp_nb_continue_write(ftp);	} else {		ret=ftp_nb_continue_read(ftp);	}	if (ret != PHP_FTP_MOREDATA && ftp->closestream) {		php_stream_close(ftp->stream);	}	if (ret == PHP_FTP_FAILED) {		php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s", ftp->inbuf);	}	RETURN_LONG(ret);}/* }}} *//* {{{ proto bool ftp_fput(resource stream, string remote_file, resource fp, int mode[, int startpos])   Stores a file from an open file to the FTP server */PHP_FUNCTION(ftp_fput){	zval		*z_ftp, *z_file;	ftpbuf_t	*ftp;	ftptype_t	xtype;	int		remote_len;	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);		}	}	if (!ftp_put(ftp, remote, stream, xtype, startpos)) {		php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s", ftp->inbuf);		RETURN_FALSE;	}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -