7513 lines
198 KiB
C
7513 lines
198 KiB
C
#ifdef HAVE_CONFIG_H
|
|
#include "config.h"
|
|
#endif
|
|
|
|
#include <php.h>
|
|
|
|
#ifdef ZTS
|
|
#include "TSRM.h"
|
|
#endif
|
|
|
|
#include <SAPI.h>
|
|
#include <php_ini.h>
|
|
#include "ext/standard/info.h"
|
|
#include <zend_extensions.h>
|
|
#include <zend_exceptions.h>
|
|
#include <string.h>
|
|
#include <stdlib.h>
|
|
#include <stdio.h>
|
|
#include <errno.h>
|
|
#include <time.h>
|
|
#include "fdfs_client.h"
|
|
#include "logger.h"
|
|
#include "sockopt.h"
|
|
#include "fdfs_global.h"
|
|
#include "shared_func.h"
|
|
#include "client_global.h"
|
|
#include "fastdfs_client.h"
|
|
#include "fdfs_http_shared.h"
|
|
|
|
typedef struct
|
|
{
|
|
TrackerServerGroup *pTrackerGroup;
|
|
} FDFSConfigInfo;
|
|
|
|
typedef struct
|
|
{
|
|
TrackerServerGroup *pTrackerGroup;
|
|
int err_no;
|
|
} FDFSPhpContext;
|
|
|
|
typedef struct
|
|
{
|
|
zend_object zo;
|
|
FDFSConfigInfo *pConfigInfo;
|
|
FDFSPhpContext context;
|
|
} php_fdfs_t;
|
|
|
|
typedef struct
|
|
{
|
|
zval *func_name;
|
|
zval *args;
|
|
} php_fdfs_callback_t;
|
|
|
|
typedef struct
|
|
{
|
|
php_fdfs_callback_t callback;
|
|
int64_t file_size;
|
|
} php_fdfs_upload_callback_t;
|
|
|
|
static int php_fdfs_download_callback(void *arg, const int64_t file_size, \
|
|
const char *data, const int current_size);
|
|
|
|
static FDFSConfigInfo *config_list = NULL;
|
|
static int config_count = 0;
|
|
|
|
static FDFSPhpContext php_context = {&g_tracker_group, 0};
|
|
|
|
static int le_fdht;
|
|
|
|
static zend_class_entry *fdfs_ce = NULL;
|
|
static zend_class_entry *fdfs_exception_ce = NULL;
|
|
|
|
#if HAVE_SPL
|
|
static zend_class_entry *spl_ce_RuntimeException = NULL;
|
|
#endif
|
|
|
|
#if (PHP_MAJOR_VERSION == 5 && PHP_MINOR_VERSION < 3)
|
|
const zend_fcall_info empty_fcall_info = { 0, NULL, NULL, NULL, NULL, 0, NULL, NULL, 0 };
|
|
#undef ZEND_BEGIN_ARG_INFO_EX
|
|
#define ZEND_BEGIN_ARG_INFO_EX(name, pass_rest_by_reference, return_reference, required_num_args) \
|
|
static zend_arg_info name[] = { \
|
|
{ NULL, 0, NULL, 0, 0, 0, pass_rest_by_reference, return_reference, required_num_args },
|
|
#endif
|
|
|
|
|
|
#define CLEAR_HASH_SOCK_FIELD(php_hash) \
|
|
{ \
|
|
zval *sock_zval; \
|
|
MAKE_STD_ZVAL(sock_zval); \
|
|
ZVAL_LONG(sock_zval, -1); \
|
|
\
|
|
zend_hash_update(php_hash, "sock", sizeof("sock"), \
|
|
&sock_zval, sizeof(zval *), NULL); \
|
|
}
|
|
|
|
// Every user visible function must have an entry in fastdfs_client_functions[].
|
|
zend_function_entry fastdfs_client_functions[] = {
|
|
ZEND_FE(fastdfs_client_version, NULL)
|
|
ZEND_FE(fastdfs_active_test, NULL)
|
|
ZEND_FE(fastdfs_connect_server, NULL)
|
|
ZEND_FE(fastdfs_disconnect_server, NULL)
|
|
ZEND_FE(fastdfs_get_last_error_no, NULL)
|
|
ZEND_FE(fastdfs_get_last_error_info, NULL)
|
|
ZEND_FE(fastdfs_tracker_get_connection, NULL)
|
|
ZEND_FE(fastdfs_tracker_make_all_connections, NULL)
|
|
ZEND_FE(fastdfs_tracker_close_all_connections, NULL)
|
|
ZEND_FE(fastdfs_tracker_list_groups, NULL)
|
|
ZEND_FE(fastdfs_tracker_query_storage_store, NULL)
|
|
ZEND_FE(fastdfs_tracker_query_storage_store_list, NULL)
|
|
ZEND_FE(fastdfs_tracker_query_storage_update, NULL)
|
|
ZEND_FE(fastdfs_tracker_query_storage_fetch, NULL)
|
|
ZEND_FE(fastdfs_tracker_query_storage_list, NULL)
|
|
ZEND_FE(fastdfs_tracker_query_storage_update1, NULL)
|
|
ZEND_FE(fastdfs_tracker_query_storage_fetch1, NULL)
|
|
ZEND_FE(fastdfs_tracker_query_storage_list1, NULL)
|
|
ZEND_FE(fastdfs_tracker_delete_storage, NULL)
|
|
ZEND_FE(fastdfs_storage_upload_by_filename, NULL)
|
|
ZEND_FE(fastdfs_storage_upload_by_filename1, NULL)
|
|
ZEND_FE(fastdfs_storage_upload_by_filebuff, NULL)
|
|
ZEND_FE(fastdfs_storage_upload_by_filebuff1, NULL)
|
|
ZEND_FE(fastdfs_storage_upload_by_callback, NULL)
|
|
ZEND_FE(fastdfs_storage_upload_by_callback1, NULL)
|
|
ZEND_FE(fastdfs_storage_append_by_filename, NULL)
|
|
ZEND_FE(fastdfs_storage_append_by_filename1, NULL)
|
|
ZEND_FE(fastdfs_storage_append_by_filebuff, NULL)
|
|
ZEND_FE(fastdfs_storage_append_by_filebuff1, NULL)
|
|
ZEND_FE(fastdfs_storage_append_by_callback, NULL)
|
|
ZEND_FE(fastdfs_storage_append_by_callback1, NULL)
|
|
ZEND_FE(fastdfs_storage_modify_by_filename, NULL)
|
|
ZEND_FE(fastdfs_storage_modify_by_filename1, NULL)
|
|
ZEND_FE(fastdfs_storage_modify_by_filebuff, NULL)
|
|
ZEND_FE(fastdfs_storage_modify_by_filebuff1, NULL)
|
|
ZEND_FE(fastdfs_storage_modify_by_callback, NULL)
|
|
ZEND_FE(fastdfs_storage_modify_by_callback1, NULL)
|
|
ZEND_FE(fastdfs_storage_upload_appender_by_filename, NULL)
|
|
ZEND_FE(fastdfs_storage_upload_appender_by_filename1, NULL)
|
|
ZEND_FE(fastdfs_storage_upload_appender_by_filebuff, NULL)
|
|
ZEND_FE(fastdfs_storage_upload_appender_by_filebuff1, NULL)
|
|
ZEND_FE(fastdfs_storage_upload_appender_by_callback, NULL)
|
|
ZEND_FE(fastdfs_storage_upload_appender_by_callback1, NULL)
|
|
ZEND_FE(fastdfs_storage_upload_slave_by_filename, NULL)
|
|
ZEND_FE(fastdfs_storage_upload_slave_by_filename1, NULL)
|
|
ZEND_FE(fastdfs_storage_upload_slave_by_filebuff, NULL)
|
|
ZEND_FE(fastdfs_storage_upload_slave_by_filebuff1, NULL)
|
|
ZEND_FE(fastdfs_storage_upload_slave_by_callback, NULL)
|
|
ZEND_FE(fastdfs_storage_upload_slave_by_callback1, NULL)
|
|
ZEND_FE(fastdfs_storage_delete_file, NULL)
|
|
ZEND_FE(fastdfs_storage_delete_file1, NULL)
|
|
ZEND_FE(fastdfs_storage_truncate_file, NULL)
|
|
ZEND_FE(fastdfs_storage_truncate_file1, NULL)
|
|
ZEND_FE(fastdfs_storage_download_file_to_buff, NULL)
|
|
ZEND_FE(fastdfs_storage_download_file_to_buff1, NULL)
|
|
ZEND_FE(fastdfs_storage_download_file_to_file, NULL)
|
|
ZEND_FE(fastdfs_storage_download_file_to_file1, NULL)
|
|
ZEND_FE(fastdfs_storage_download_file_to_callback, NULL)
|
|
ZEND_FE(fastdfs_storage_download_file_to_callback1, NULL)
|
|
ZEND_FE(fastdfs_storage_set_metadata, NULL)
|
|
ZEND_FE(fastdfs_storage_set_metadata1, NULL)
|
|
ZEND_FE(fastdfs_storage_get_metadata, NULL)
|
|
ZEND_FE(fastdfs_storage_get_metadata1, NULL)
|
|
ZEND_FE(fastdfs_http_gen_token, NULL)
|
|
ZEND_FE(fastdfs_get_file_info, NULL)
|
|
ZEND_FE(fastdfs_get_file_info1, NULL)
|
|
ZEND_FE(fastdfs_storage_file_exist, NULL)
|
|
ZEND_FE(fastdfs_storage_file_exist1, NULL)
|
|
ZEND_FE(fastdfs_gen_slave_filename, NULL)
|
|
ZEND_FE(fastdfs_send_data, NULL)
|
|
{NULL, NULL, NULL} /* Must be the last line */
|
|
};
|
|
|
|
|
|
zend_module_entry fastdfs_client_module_entry = {
|
|
STANDARD_MODULE_HEADER,
|
|
"fastdfs_client",
|
|
fastdfs_client_functions,
|
|
PHP_MINIT(fastdfs_client),
|
|
PHP_MSHUTDOWN(fastdfs_client),
|
|
NULL,//PHP_RINIT(fastdfs_client),
|
|
NULL,//PHP_RSHUTDOWN(fastdfs_client),
|
|
PHP_MINFO(fastdfs_client),
|
|
"1.00",
|
|
STANDARD_MODULE_PROPERTIES
|
|
};
|
|
|
|
#ifdef COMPILE_DL_FASTDFS_CLIENT
|
|
ZEND_GET_MODULE(fastdfs_client)
|
|
#endif
|
|
|
|
static int fastdfs_convert_metadata_to_array(zval *metadata_obj, \
|
|
FDFSMetaData **meta_list, int *meta_count)
|
|
{
|
|
HashTable *meta_hash;
|
|
char *szKey;
|
|
char *szValue;
|
|
unsigned long index;
|
|
unsigned int key_len;
|
|
int value_len;
|
|
HashPosition pointer;
|
|
zval ***ppp;
|
|
zval **data;
|
|
FDFSMetaData *pMetaData;
|
|
|
|
meta_hash = Z_ARRVAL_P(metadata_obj);
|
|
*meta_count = zend_hash_num_elements(meta_hash);
|
|
if (*meta_count == 0)
|
|
{
|
|
*meta_list = NULL;
|
|
return 0;
|
|
}
|
|
|
|
*meta_list = (FDFSMetaData *)malloc(sizeof(FDFSMetaData)*(*meta_count));
|
|
if (*meta_list == NULL)
|
|
{
|
|
logError("file: "__FILE__", line: %d, " \
|
|
"malloc %d bytes fail, " \
|
|
"errno: %d, error info: %s", __LINE__, \
|
|
(int)sizeof(FDFSMetaData) * (*meta_count), \
|
|
errno, STRERROR(errno));
|
|
return errno != 0 ? errno : ENOMEM;
|
|
}
|
|
|
|
memset(*meta_list, 0, sizeof(FDFSMetaData) * (*meta_count));
|
|
pMetaData = *meta_list;
|
|
ppp = &data;
|
|
for (zend_hash_internal_pointer_reset_ex(meta_hash, &pointer); \
|
|
zend_hash_get_current_data_ex(meta_hash, (void **)ppp, &pointer)
|
|
== SUCCESS; zend_hash_move_forward_ex(meta_hash, &pointer))
|
|
{
|
|
if (zend_hash_get_current_key_ex(meta_hash, &szKey, \
|
|
&(key_len), &index, 0, &pointer) != HASH_KEY_IS_STRING)
|
|
{
|
|
logError("file: "__FILE__", line: %d, " \
|
|
"invalid array element, " \
|
|
"index=%ld!", __LINE__, index);
|
|
|
|
free(*meta_list);
|
|
*meta_list = NULL;
|
|
*meta_count = 0;
|
|
return EINVAL;
|
|
}
|
|
|
|
if (key_len > FDFS_MAX_META_NAME_LEN)
|
|
{
|
|
key_len = FDFS_MAX_META_NAME_LEN;
|
|
}
|
|
memcpy(pMetaData->name, szKey, key_len);
|
|
|
|
if ((*data)->type == IS_STRING)
|
|
{
|
|
szValue = Z_STRVAL_PP(data);
|
|
value_len = Z_STRLEN_PP(data);
|
|
|
|
if (value_len > FDFS_MAX_META_VALUE_LEN)
|
|
{
|
|
value_len = FDFS_MAX_META_VALUE_LEN;
|
|
}
|
|
memcpy(pMetaData->value, szValue, value_len);
|
|
}
|
|
else if ((*data)->type == IS_LONG || (*data)->type == IS_BOOL)
|
|
{
|
|
sprintf(pMetaData->value, "%ld", (*data)->value.lval);
|
|
}
|
|
else if ((*data)->type == IS_DOUBLE)
|
|
{
|
|
sprintf(pMetaData->value, "%.2f", (*data)->value.dval);
|
|
}
|
|
else
|
|
{
|
|
logError("file: "__FILE__", line: %d, " \
|
|
"invalid array element, key=%s, value type=%d",\
|
|
__LINE__, szKey, (*data)->type);
|
|
|
|
free(*meta_list);
|
|
*meta_list = NULL;
|
|
*meta_count = 0;
|
|
return EINVAL;
|
|
}
|
|
|
|
pMetaData++;
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
static void php_fdfs_tracker_get_connection_impl(INTERNAL_FUNCTION_PARAMETERS, \
|
|
FDFSPhpContext *pContext)
|
|
{
|
|
int argc;
|
|
ConnectionInfo *pTrackerServer;
|
|
|
|
argc = ZEND_NUM_ARGS();
|
|
if (argc != 0)
|
|
{
|
|
logError("file: "__FILE__", line: %d, " \
|
|
"tracker_get_connection parameters count: %d != 0",
|
|
__LINE__, argc);
|
|
pContext->err_no = EINVAL;
|
|
RETURN_BOOL(false);
|
|
}
|
|
|
|
pTrackerServer = tracker_get_connection_no_pool(pContext->pTrackerGroup);
|
|
if (pTrackerServer == NULL)
|
|
{
|
|
pContext->err_no = ENOENT;
|
|
RETURN_BOOL(false);
|
|
}
|
|
|
|
pContext->err_no = 0;
|
|
array_init(return_value);
|
|
|
|
add_assoc_stringl_ex(return_value, "ip_addr", sizeof("ip_addr"), \
|
|
pTrackerServer->ip_addr, strlen(pTrackerServer->ip_addr), 1);
|
|
add_assoc_long_ex(return_value, "port", sizeof("port"), \
|
|
pTrackerServer->port);
|
|
add_assoc_long_ex(return_value, "sock", sizeof("sock"), \
|
|
pTrackerServer->sock);
|
|
}
|
|
|
|
static void php_fdfs_tracker_make_all_connections_impl( \
|
|
INTERNAL_FUNCTION_PARAMETERS, FDFSPhpContext *pContext)
|
|
{
|
|
int argc;
|
|
|
|
argc = ZEND_NUM_ARGS();
|
|
if (argc != 0)
|
|
{
|
|
logError("file: "__FILE__", line: %d, " \
|
|
"tracker_make_all_connections parameters " \
|
|
"count: %d != 0", __LINE__, argc);
|
|
pContext->err_no = EINVAL;
|
|
RETURN_BOOL(false);
|
|
}
|
|
|
|
pContext->err_no = tracker_get_all_connections_ex( \
|
|
pContext->pTrackerGroup);
|
|
if (pContext->err_no == 0)
|
|
{
|
|
RETURN_BOOL(true);
|
|
}
|
|
else
|
|
{
|
|
RETURN_BOOL(false);
|
|
}
|
|
}
|
|
|
|
static void php_fdfs_tracker_close_all_connections_impl( \
|
|
INTERNAL_FUNCTION_PARAMETERS, FDFSPhpContext *pContext)
|
|
{
|
|
int argc;
|
|
|
|
argc = ZEND_NUM_ARGS();
|
|
if (argc != 0)
|
|
{
|
|
logError("file: "__FILE__", line: %d, " \
|
|
"tracker_close_all_connections parameters " \
|
|
"count: %d != 0", __LINE__, argc);
|
|
pContext->err_no = EINVAL;
|
|
RETURN_BOOL(false);
|
|
}
|
|
|
|
tracker_close_all_connections_ex(pContext->pTrackerGroup);
|
|
pContext->err_no = 0;
|
|
RETURN_BOOL(true);
|
|
}
|
|
|
|
static void php_fdfs_connect_server_impl(INTERNAL_FUNCTION_PARAMETERS, \
|
|
FDFSPhpContext *pContext)
|
|
{
|
|
int argc;
|
|
char *ip_addr;
|
|
int ip_len;
|
|
long port;
|
|
ConnectionInfo server_info;
|
|
|
|
argc = ZEND_NUM_ARGS();
|
|
if (argc != 2)
|
|
{
|
|
logError("file: "__FILE__", line: %d, " \
|
|
"fastdfs_connect_server parameters count: %d != 2", \
|
|
__LINE__, argc);
|
|
pContext->err_no = EINVAL;
|
|
RETURN_BOOL(false);
|
|
}
|
|
|
|
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "sl", \
|
|
&ip_addr, &ip_len, &port) == FAILURE)
|
|
{
|
|
logError("file: "__FILE__", line: %d, " \
|
|
"zend_parse_parameters fail!", __LINE__);
|
|
pContext->err_no = EINVAL;
|
|
RETURN_BOOL(false);
|
|
}
|
|
|
|
snprintf(server_info.ip_addr, sizeof(server_info.ip_addr), \
|
|
"%s", ip_addr);
|
|
server_info.port = port;
|
|
server_info.sock = -1;
|
|
|
|
if ((pContext->err_no=conn_pool_connect_server(&server_info, \
|
|
g_fdfs_network_timeout)) == 0)
|
|
{
|
|
array_init(return_value);
|
|
add_assoc_stringl_ex(return_value, "ip_addr", \
|
|
sizeof("ip_addr"), ip_addr, ip_len, 1);
|
|
add_assoc_long_ex(return_value, "port", sizeof("port"), \
|
|
port);
|
|
add_assoc_long_ex(return_value, "sock", sizeof("sock"), \
|
|
server_info.sock);
|
|
}
|
|
else
|
|
{
|
|
RETURN_BOOL(false);
|
|
}
|
|
}
|
|
|
|
static void php_fdfs_disconnect_server_impl(INTERNAL_FUNCTION_PARAMETERS, \
|
|
FDFSPhpContext *pContext)
|
|
{
|
|
int argc;
|
|
zval *server_info;
|
|
HashTable *tracker_hash;
|
|
zval **data;
|
|
zval ***ppp;
|
|
int sock;
|
|
|
|
argc = ZEND_NUM_ARGS();
|
|
if (argc != 1)
|
|
{
|
|
logError("file: "__FILE__", line: %d, " \
|
|
"fastdfs_disconnect_server parameters count: %d != 1", \
|
|
__LINE__, argc);
|
|
pContext->err_no = EINVAL;
|
|
RETURN_BOOL(false);
|
|
}
|
|
|
|
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "a", \
|
|
&server_info) == FAILURE)
|
|
{
|
|
logError("file: "__FILE__", line: %d, " \
|
|
"zend_parse_parameters fail!", __LINE__);
|
|
pContext->err_no = EINVAL;
|
|
RETURN_BOOL(false);
|
|
}
|
|
|
|
tracker_hash = Z_ARRVAL_P(server_info);
|
|
data = NULL;
|
|
ppp = &data;
|
|
if (zend_hash_find(tracker_hash, "sock", sizeof("sock"), \
|
|
(void **)ppp) == FAILURE)
|
|
{
|
|
pContext->err_no = ENOENT;
|
|
RETURN_BOOL(false);
|
|
}
|
|
|
|
if ((*data)->type == IS_LONG)
|
|
{
|
|
sock = (*data)->value.lval;
|
|
if (sock >= 0)
|
|
{
|
|
close(sock);
|
|
}
|
|
|
|
CLEAR_HASH_SOCK_FIELD(tracker_hash)
|
|
|
|
pContext->err_no = 0;
|
|
RETURN_BOOL(true);
|
|
}
|
|
else
|
|
{
|
|
logError("file: "__FILE__", line: %d, " \
|
|
"sock type is invalid, type=%d!", \
|
|
__LINE__, (*data)->type);
|
|
pContext->err_no = EINVAL;
|
|
RETURN_BOOL(false);
|
|
}
|
|
}
|
|
|
|
static int php_fdfs_get_callback_from_hash(HashTable *callback_hash, \
|
|
php_fdfs_callback_t *pCallback)
|
|
{
|
|
zval **data;
|
|
zval ***ppp;
|
|
|
|
data = NULL;
|
|
ppp = &data;
|
|
if (zend_hash_find(callback_hash, "callback", sizeof("callback"), \
|
|
(void **)ppp) == FAILURE)
|
|
{
|
|
logError("file: "__FILE__", line: %d, " \
|
|
"key \"callback\" not exist!", __LINE__);
|
|
return ENOENT;
|
|
}
|
|
if ((*data)->type != IS_STRING)
|
|
{
|
|
logError("file: "__FILE__", line: %d, " \
|
|
"key \"callback\" is not string type, type=%d!", \
|
|
__LINE__, (*data)->type);
|
|
return EINVAL;
|
|
}
|
|
pCallback->func_name = *data;
|
|
|
|
data = NULL;
|
|
if (zend_hash_find(callback_hash, "args", sizeof("args"), \
|
|
(void **)ppp) == FAILURE)
|
|
{
|
|
pCallback->args = NULL;
|
|
}
|
|
else
|
|
{
|
|
pCallback->args = ((*data)->type == IS_NULL) ? NULL : *data;
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
static int php_fdfs_get_upload_callback_from_hash(HashTable *callback_hash, \
|
|
php_fdfs_upload_callback_t *pUploadCallback)
|
|
{
|
|
zval **data;
|
|
zval ***ppp;
|
|
int result;
|
|
|
|
if ((result=php_fdfs_get_callback_from_hash(callback_hash, \
|
|
&(pUploadCallback->callback))) != 0)
|
|
{
|
|
return result;
|
|
}
|
|
|
|
data = NULL;
|
|
ppp = &data;
|
|
if (zend_hash_find(callback_hash, "file_size", sizeof("file_size"), \
|
|
(void **)ppp) == FAILURE)
|
|
{
|
|
logError("file: "__FILE__", line: %d, " \
|
|
"key \"file_size\" not exist!", __LINE__);
|
|
return ENOENT;
|
|
}
|
|
if ((*data)->type != IS_LONG)
|
|
{
|
|
logError("file: "__FILE__", line: %d, " \
|
|
"key \"file_size\" is not long type, type=%d!", \
|
|
__LINE__, (*data)->type);
|
|
return EINVAL;
|
|
}
|
|
pUploadCallback->file_size = (*data)->value.lval;
|
|
if (pUploadCallback->file_size < 0)
|
|
{
|
|
logError("file: "__FILE__", line: %d, " \
|
|
"file_size: "INT64_PRINTF_FORMAT" is invalid!", \
|
|
__LINE__, pUploadCallback->file_size);
|
|
return EINVAL;
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
static int php_fdfs_get_server_from_hash(HashTable *tracker_hash, \
|
|
ConnectionInfo *pTrackerServer)
|
|
{
|
|
zval **data;
|
|
zval ***ppp;
|
|
char *ip_addr;
|
|
int ip_len;
|
|
|
|
memset(pTrackerServer, 0, sizeof(ConnectionInfo));
|
|
data = NULL;
|
|
ppp = &data;
|
|
if (zend_hash_find(tracker_hash, "ip_addr", sizeof("ip_addr"), \
|
|
(void **)ppp) == FAILURE)
|
|
{
|
|
logError("file: "__FILE__", line: %d, " \
|
|
"key \"ip_addr\" not exist!", __LINE__);
|
|
return ENOENT;
|
|
}
|
|
if ((*data)->type != IS_STRING)
|
|
{
|
|
logError("file: "__FILE__", line: %d, " \
|
|
"key \"ip_addr\" is not string type, type=%d!", \
|
|
__LINE__, (*data)->type);
|
|
return EINVAL;
|
|
}
|
|
|
|
ip_addr = Z_STRVAL_PP(data);
|
|
ip_len = Z_STRLEN_PP(data);
|
|
if (ip_len >= IP_ADDRESS_SIZE)
|
|
{
|
|
ip_len = IP_ADDRESS_SIZE - 1;
|
|
}
|
|
memcpy(pTrackerServer->ip_addr, ip_addr, ip_len);
|
|
|
|
if (zend_hash_find(tracker_hash, "port", sizeof("port"), \
|
|
(void **)ppp) == FAILURE)
|
|
{
|
|
logError("file: "__FILE__", line: %d, " \
|
|
"key \"port\" not exist!", __LINE__);
|
|
return ENOENT;
|
|
}
|
|
if ((*data)->type != IS_LONG)
|
|
{
|
|
logError("file: "__FILE__", line: %d, " \
|
|
"key \"port\" is not long type, type=%d!", \
|
|
__LINE__, (*data)->type);
|
|
return EINVAL;
|
|
}
|
|
pTrackerServer->port = (*data)->value.lval;
|
|
|
|
if (zend_hash_find(tracker_hash, "sock", sizeof("sock"), \
|
|
(void **)ppp) == FAILURE)
|
|
{
|
|
logError("file: "__FILE__", line: %d, " \
|
|
"key \"sock\" not exist!", __LINE__);
|
|
return ENOENT;
|
|
}
|
|
if ((*data)->type != IS_LONG)
|
|
{
|
|
logError("file: "__FILE__", line: %d, " \
|
|
"key \"sock\" is not long type, type=%d!", \
|
|
__LINE__, (*data)->type);
|
|
return EINVAL;
|
|
}
|
|
|
|
pTrackerServer->sock = (*data)->value.lval;
|
|
return 0;
|
|
}
|
|
|
|
static void php_fastdfs_active_test_impl(INTERNAL_FUNCTION_PARAMETERS, \
|
|
FDFSPhpContext *pContext)
|
|
{
|
|
int argc;
|
|
zval *server_info;
|
|
HashTable *tracker_hash;
|
|
ConnectionInfo server;
|
|
|
|
argc = ZEND_NUM_ARGS();
|
|
if (argc != 1)
|
|
{
|
|
logError("file: "__FILE__", line: %d, " \
|
|
"fastdfs_active_test parameters count: %d != 1", \
|
|
__LINE__, argc);
|
|
pContext->err_no = EINVAL;
|
|
RETURN_BOOL(false);
|
|
}
|
|
|
|
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "a", \
|
|
&server_info) == FAILURE)
|
|
{
|
|
logError("file: "__FILE__", line: %d, " \
|
|
"zend_parse_parameters fail!", __LINE__);
|
|
pContext->err_no = EINVAL;
|
|
RETURN_BOOL(false);
|
|
}
|
|
|
|
tracker_hash = Z_ARRVAL_P(server_info);
|
|
|
|
if ((pContext->err_no=php_fdfs_get_server_from_hash(tracker_hash, \
|
|
&server)) != 0)
|
|
{
|
|
RETURN_BOOL(false);
|
|
}
|
|
|
|
if ((pContext->err_no=fdfs_active_test(&server)) != 0)
|
|
{
|
|
RETURN_BOOL(false);
|
|
}
|
|
else
|
|
{
|
|
RETURN_BOOL(true);
|
|
}
|
|
}
|
|
|
|
static void php_fdfs_tracker_list_groups_impl(INTERNAL_FUNCTION_PARAMETERS, \
|
|
FDFSPhpContext *pContext)
|
|
{
|
|
int argc;
|
|
char *group_name;
|
|
int group_nlen;
|
|
zval *tracker_obj;
|
|
zval *group_info_array;
|
|
zval *server_info_array;
|
|
HashTable *tracker_hash;
|
|
ConnectionInfo tracker_server;
|
|
ConnectionInfo *pTrackerServer;
|
|
FDFSGroupStat group_stats[FDFS_MAX_GROUPS];
|
|
FDFSGroupStat *pGroupStat;
|
|
FDFSGroupStat *pGroupEnd;
|
|
int group_count;
|
|
int result;
|
|
int storage_count;
|
|
int saved_tracker_sock;
|
|
FDFSStorageInfo storage_infos[FDFS_MAX_SERVERS_EACH_GROUP];
|
|
FDFSStorageInfo *pStorage;
|
|
FDFSStorageInfo *pStorageEnd;
|
|
FDFSStorageStat *pStorageStat;
|
|
|
|
argc = ZEND_NUM_ARGS();
|
|
if (argc > 2)
|
|
{
|
|
logError("file: "__FILE__", line: %d, " \
|
|
"tracker_list_groups parameters count: %d > 2",
|
|
__LINE__, argc);
|
|
pContext->err_no = EINVAL;
|
|
RETURN_BOOL(false);
|
|
}
|
|
|
|
group_name = NULL;
|
|
group_nlen = 0;
|
|
tracker_obj = NULL;
|
|
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|sa", \
|
|
&group_name, &group_nlen, &tracker_obj) == FAILURE)
|
|
{
|
|
logError("file: "__FILE__", line: %d, " \
|
|
"zend_parse_parameters fail!", __LINE__);
|
|
pContext->err_no = EINVAL;
|
|
RETURN_BOOL(false);
|
|
}
|
|
|
|
if (tracker_obj == NULL)
|
|
{
|
|
pTrackerServer = tracker_get_connection_no_pool( \
|
|
pContext->pTrackerGroup);
|
|
if (pTrackerServer == NULL)
|
|
{
|
|
pContext->err_no = ENOENT;
|
|
RETURN_BOOL(false);
|
|
}
|
|
|
|
saved_tracker_sock = -1;
|
|
tracker_hash = NULL;
|
|
}
|
|
else
|
|
{
|
|
pTrackerServer = &tracker_server;
|
|
tracker_hash = Z_ARRVAL_P(tracker_obj);
|
|
if ((result=php_fdfs_get_server_from_hash(tracker_hash, \
|
|
pTrackerServer)) != 0)
|
|
{
|
|
pContext->err_no = result;
|
|
RETURN_BOOL(false);
|
|
}
|
|
|
|
saved_tracker_sock = pTrackerServer->sock;
|
|
}
|
|
|
|
if (group_name != NULL && group_nlen > 0)
|
|
{
|
|
group_count = 1;
|
|
result = tracker_list_one_group(pTrackerServer, group_name, \
|
|
group_stats);
|
|
}
|
|
else
|
|
{
|
|
result = tracker_list_groups(pTrackerServer, group_stats, \
|
|
FDFS_MAX_GROUPS, &group_count);
|
|
}
|
|
|
|
if (tracker_hash != NULL && pTrackerServer->sock != \
|
|
saved_tracker_sock)
|
|
{
|
|
CLEAR_HASH_SOCK_FIELD(tracker_hash)
|
|
}
|
|
|
|
if (result != 0)
|
|
{
|
|
if (tracker_obj == NULL)
|
|
{
|
|
conn_pool_disconnect_server(pTrackerServer);
|
|
}
|
|
pContext->err_no = result;
|
|
RETURN_BOOL(false);
|
|
}
|
|
|
|
pContext->err_no = 0;
|
|
array_init(return_value);
|
|
|
|
pGroupEnd = group_stats + group_count;
|
|
for (pGroupStat=group_stats; pGroupStat<pGroupEnd; pGroupStat++)
|
|
{
|
|
|
|
ALLOC_INIT_ZVAL(group_info_array);
|
|
array_init(group_info_array);
|
|
|
|
add_assoc_zval_ex(return_value, pGroupStat->group_name, \
|
|
strlen(pGroupStat->group_name) + 1, group_info_array);
|
|
|
|
add_assoc_long_ex(group_info_array, "total_space", \
|
|
sizeof("total_space"), pGroupStat->total_mb);
|
|
add_assoc_long_ex(group_info_array, "free_space", \
|
|
sizeof("free_space"), pGroupStat->free_mb);
|
|
add_assoc_long_ex(group_info_array, "trunk_free_space", \
|
|
sizeof("trunk_free_space"), pGroupStat->trunk_free_mb);
|
|
add_assoc_long_ex(group_info_array, "server_count", \
|
|
sizeof("server_count"), pGroupStat->count);
|
|
add_assoc_long_ex(group_info_array, "active_count", \
|
|
sizeof("active_count"), pGroupStat->active_count);
|
|
add_assoc_long_ex(group_info_array, "storage_port", \
|
|
sizeof("storage_port"), pGroupStat->storage_port);
|
|
add_assoc_long_ex(group_info_array, "storage_http_port", \
|
|
sizeof("storage_http_port"), \
|
|
pGroupStat->storage_http_port);
|
|
add_assoc_long_ex(group_info_array, "store_path_count", \
|
|
sizeof("store_path_count"), \
|
|
pGroupStat->store_path_count);
|
|
add_assoc_long_ex(group_info_array, "subdir_count_per_path", \
|
|
sizeof("subdir_count_per_path"), \
|
|
pGroupStat->subdir_count_per_path);
|
|
add_assoc_long_ex(group_info_array, "current_write_server", \
|
|
sizeof("current_write_server"), \
|
|
pGroupStat->current_write_server);
|
|
add_assoc_long_ex(group_info_array, "current_trunk_file_id", \
|
|
sizeof("current_trunk_file_id"), \
|
|
pGroupStat->current_trunk_file_id);
|
|
|
|
result = tracker_list_servers(pTrackerServer, \
|
|
pGroupStat->group_name, NULL, \
|
|
storage_infos, FDFS_MAX_SERVERS_EACH_GROUP, \
|
|
&storage_count);
|
|
if (result != 0)
|
|
{
|
|
if (tracker_obj == NULL)
|
|
{
|
|
conn_pool_disconnect_server(pTrackerServer);
|
|
}
|
|
|
|
pContext->err_no = result;
|
|
RETURN_BOOL(false);
|
|
}
|
|
|
|
pStorageEnd = storage_infos + storage_count;
|
|
for (pStorage=storage_infos; pStorage<pStorageEnd; \
|
|
pStorage++)
|
|
{
|
|
ALLOC_INIT_ZVAL(server_info_array);
|
|
array_init(server_info_array);
|
|
|
|
add_assoc_zval_ex(group_info_array, pStorage->id, \
|
|
strlen(pStorage->id) + 1, server_info_array);
|
|
|
|
add_assoc_stringl_ex(server_info_array, \
|
|
"ip_addr", sizeof("ip_addr"), \
|
|
pStorage->ip_addr, strlen(pStorage->ip_addr), 1);
|
|
|
|
add_assoc_long_ex(server_info_array, \
|
|
"join_time", sizeof("join_time"), \
|
|
pStorage->join_time);
|
|
|
|
add_assoc_long_ex(server_info_array, \
|
|
"up_time", sizeof("up_time"), \
|
|
pStorage->up_time);
|
|
|
|
add_assoc_stringl_ex(server_info_array, \
|
|
"http_domain", sizeof("http_domain"), \
|
|
pStorage->domain_name, \
|
|
strlen(pStorage->domain_name), 1);
|
|
|
|
add_assoc_stringl_ex(server_info_array, \
|
|
"version", sizeof("version"), \
|
|
pStorage->version, strlen(pStorage->version), 1);
|
|
|
|
add_assoc_stringl_ex(server_info_array, \
|
|
"src_storage_id", sizeof("src_storage_id"), \
|
|
pStorage->src_id, strlen(pStorage->src_id), 1);
|
|
|
|
add_assoc_bool_ex(server_info_array, \
|
|
"if_trunk_server", sizeof("if_trunk_server"), \
|
|
pStorage->if_trunk_server);
|
|
|
|
add_assoc_long_ex(server_info_array, \
|
|
"upload_priority", sizeof("upload_priority"), \
|
|
pStorage->upload_priority);
|
|
|
|
add_assoc_long_ex(server_info_array, \
|
|
"store_path_count", sizeof("store_path_count"),\
|
|
pStorage->store_path_count);
|
|
|
|
add_assoc_long_ex(server_info_array, \
|
|
"subdir_count_per_path", \
|
|
sizeof("subdir_count_per_path"), \
|
|
pStorage->subdir_count_per_path);
|
|
|
|
add_assoc_long_ex(server_info_array, \
|
|
"storage_port", sizeof("storage_port"), \
|
|
pStorage->storage_port);
|
|
|
|
add_assoc_long_ex(server_info_array, \
|
|
"storage_http_port", \
|
|
sizeof("storage_http_port"), \
|
|
pStorage->storage_http_port);
|
|
|
|
add_assoc_long_ex(server_info_array, \
|
|
"current_write_path", \
|
|
sizeof("current_write_path"), \
|
|
pStorage->current_write_path);
|
|
|
|
add_assoc_long_ex(server_info_array, "status", \
|
|
sizeof("status"), pStorage->status);
|
|
add_assoc_long_ex(server_info_array, "total_space", \
|
|
sizeof("total_space"), pStorage->total_mb);
|
|
add_assoc_long_ex(server_info_array, "free_space", \
|
|
sizeof("free_space"), pStorage->free_mb);
|
|
|
|
pStorageStat = &(pStorage->stat);
|
|
|
|
add_assoc_long_ex(server_info_array, \
|
|
"total_upload_count", \
|
|
sizeof("total_upload_count"), \
|
|
pStorageStat->total_upload_count);
|
|
|
|
add_assoc_long_ex(server_info_array, \
|
|
"success_upload_count", \
|
|
sizeof("success_upload_count"), \
|
|
pStorageStat->success_upload_count);
|
|
|
|
add_assoc_long_ex(server_info_array, \
|
|
"total_append_count", \
|
|
sizeof("total_append_count"), \
|
|
pStorageStat->total_append_count);
|
|
|
|
add_assoc_long_ex(server_info_array, \
|
|
"success_append_count", \
|
|
sizeof("success_append_count"), \
|
|
pStorageStat->success_append_count);
|
|
|
|
add_assoc_long_ex(server_info_array, \
|
|
"total_modify_count", \
|
|
sizeof("total_modify_count"), \
|
|
pStorageStat->total_modify_count);
|
|
|
|
add_assoc_long_ex(server_info_array, \
|
|
"success_modify_count", \
|
|
sizeof("success_modify_count"), \
|
|
pStorageStat->success_modify_count);
|
|
|
|
add_assoc_long_ex(server_info_array, \
|
|
"total_truncate_count", \
|
|
sizeof("total_truncate_count"), \
|
|
pStorageStat->total_truncate_count);
|
|
|
|
add_assoc_long_ex(server_info_array, \
|
|
"success_truncate_count", \
|
|
sizeof("success_truncate_count"), \
|
|
pStorageStat->success_truncate_count);
|
|
|
|
add_assoc_long_ex(server_info_array, \
|
|
"total_set_meta_count", \
|
|
sizeof("total_set_meta_count"), \
|
|
pStorageStat->total_set_meta_count);
|
|
|
|
add_assoc_long_ex(server_info_array, \
|
|
"success_set_meta_count", \
|
|
sizeof("success_set_meta_count"), \
|
|
pStorageStat->success_set_meta_count);
|
|
|
|
add_assoc_long_ex(server_info_array, \
|
|
"total_delete_count", \
|
|
sizeof("total_delete_count"), \
|
|
pStorageStat->total_delete_count);
|
|
|
|
add_assoc_long_ex(server_info_array, \
|
|
"success_delete_count", \
|
|
sizeof("success_delete_count"), \
|
|
pStorageStat->success_delete_count);
|
|
|
|
add_assoc_long_ex(server_info_array, \
|
|
"total_download_count", \
|
|
sizeof("total_download_count"), \
|
|
pStorageStat->total_download_count);
|
|
|
|
add_assoc_long_ex(server_info_array, \
|
|
"success_download_count", \
|
|
sizeof("success_download_count"), \
|
|
pStorageStat->success_download_count);
|
|
|
|
add_assoc_long_ex(server_info_array, \
|
|
"total_get_meta_count", \
|
|
sizeof("total_get_meta_count"), \
|
|
pStorageStat->total_get_meta_count);
|
|
|
|
add_assoc_long_ex(server_info_array, \
|
|
"success_get_meta_count", \
|
|
sizeof("success_get_meta_count"), \
|
|
pStorageStat->success_get_meta_count);
|
|
|
|
add_assoc_long_ex(server_info_array, \
|
|
"total_create_link_count", \
|
|
sizeof("total_create_link_count"), \
|
|
pStorageStat->total_create_link_count);
|
|
|
|
add_assoc_long_ex(server_info_array, \
|
|
"success_create_link_count", \
|
|
sizeof("success_create_link_count"), \
|
|
pStorageStat->success_create_link_count);
|
|
|
|
add_assoc_long_ex(server_info_array, \
|
|
"total_delete_link_count", \
|
|
sizeof("total_delete_link_count"), \
|
|
pStorageStat->total_delete_link_count);
|
|
|
|
add_assoc_long_ex(server_info_array, \
|
|
"success_delete_link_count", \
|
|
sizeof("success_delete_link_count"), \
|
|
pStorageStat->success_delete_link_count);
|
|
add_assoc_long_ex(server_info_array, \
|
|
"total_upload_bytes", \
|
|
sizeof("total_upload_bytes"), \
|
|
pStorageStat->total_upload_bytes);
|
|
add_assoc_long_ex(server_info_array, \
|
|
"success_upload_bytes", \
|
|
sizeof("success_upload_bytes"), \
|
|
pStorageStat->success_upload_bytes);
|
|
add_assoc_long_ex(server_info_array, \
|
|
"total_append_bytes", \
|
|
sizeof("total_append_bytes"), \
|
|
pStorageStat->total_append_bytes);
|
|
add_assoc_long_ex(server_info_array, \
|
|
"success_append_bytes", \
|
|
sizeof("success_append_bytes"), \
|
|
pStorageStat->success_append_bytes);
|
|
add_assoc_long_ex(server_info_array, \
|
|
"total_modify_bytes", \
|
|
sizeof("total_modify_bytes"), \
|
|
pStorageStat->total_modify_bytes);
|
|
add_assoc_long_ex(server_info_array, \
|
|
"success_modify_bytes", \
|
|
sizeof("success_modify_bytes"), \
|
|
pStorageStat->success_modify_bytes);
|
|
add_assoc_long_ex(server_info_array, \
|
|
"total_download_bytes", \
|
|
sizeof("total_download_bytes"), \
|
|
pStorageStat->total_download_bytes);
|
|
add_assoc_long_ex(server_info_array, \
|
|
"success_download_bytes", \
|
|
sizeof("success_download_bytes"), \
|
|
pStorageStat->success_download_bytes);
|
|
add_assoc_long_ex(server_info_array, \
|
|
"total_sync_in_bytes", \
|
|
sizeof("total_sync_in_bytes"), \
|
|
pStorageStat->total_sync_in_bytes);
|
|
add_assoc_long_ex(server_info_array, \
|
|
"success_sync_in_bytes", \
|
|
sizeof("success_sync_in_bytes"), \
|
|
pStorageStat->success_sync_in_bytes);
|
|
add_assoc_long_ex(server_info_array, \
|
|
"total_sync_out_bytes", \
|
|
sizeof("total_sync_out_bytes"), \
|
|
pStorageStat->total_sync_out_bytes);
|
|
add_assoc_long_ex(server_info_array, \
|
|
"success_sync_out_bytes", \
|
|
sizeof("success_sync_out_bytes"), \
|
|
pStorageStat->success_sync_out_bytes);
|
|
add_assoc_long_ex(server_info_array, \
|
|
"total_file_open_count", \
|
|
sizeof("total_file_open_count"), \
|
|
pStorageStat->total_file_open_count);
|
|
add_assoc_long_ex(server_info_array, \
|
|
"success_file_open_count", \
|
|
sizeof("success_file_open_count"), \
|
|
pStorageStat->success_file_open_count);
|
|
add_assoc_long_ex(server_info_array, \
|
|
"total_file_read_count", \
|
|
sizeof("total_file_read_count"), \
|
|
pStorageStat->total_file_read_count);
|
|
add_assoc_long_ex(server_info_array, \
|
|
"success_file_read_count", \
|
|
sizeof("success_file_read_count"), \
|
|
pStorageStat->success_file_read_count);
|
|
add_assoc_long_ex(server_info_array, \
|
|
"total_file_write_count", \
|
|
sizeof("total_file_write_count"), \
|
|
pStorageStat->total_file_write_count);
|
|
add_assoc_long_ex(server_info_array, \
|
|
"success_file_write_count", \
|
|
sizeof("success_file_write_count"), \
|
|
pStorageStat->success_file_write_count);
|
|
add_assoc_long_ex(server_info_array, \
|
|
"last_heart_beat_time", \
|
|
sizeof("last_heart_beat_time"), \
|
|
pStorageStat->last_heart_beat_time);
|
|
|
|
add_assoc_long_ex(server_info_array, \
|
|
"last_source_update", \
|
|
sizeof("last_source_update"), \
|
|
pStorageStat->last_source_update);
|
|
add_assoc_long_ex(server_info_array, \
|
|
"last_sync_update", \
|
|
sizeof("last_sync_update"), \
|
|
pStorageStat->last_sync_update);
|
|
add_assoc_long_ex(server_info_array, \
|
|
"last_synced_timestamp", \
|
|
sizeof("last_synced_timestamp"), \
|
|
pStorageStat->last_synced_timestamp);
|
|
}
|
|
}
|
|
}
|
|
|
|
static void php_fdfs_tracker_query_storage_store_impl( \
|
|
INTERNAL_FUNCTION_PARAMETERS, \
|
|
FDFSPhpContext *pContext)
|
|
{
|
|
int argc;
|
|
char new_group_name[FDFS_GROUP_NAME_MAX_LEN + 1];
|
|
char *group_name;
|
|
int group_nlen;
|
|
zval *tracker_obj;
|
|
HashTable *tracker_hash;
|
|
ConnectionInfo tracker_server;
|
|
ConnectionInfo storage_server;
|
|
ConnectionInfo *pTrackerServer;
|
|
int store_path_index;
|
|
int saved_tracker_sock;
|
|
int result;
|
|
|
|
argc = ZEND_NUM_ARGS();
|
|
if (argc > 2)
|
|
{
|
|
logError("file: "__FILE__", line: %d, " \
|
|
"tracker_query_storage_store parameters " \
|
|
"count: %d > 2", __LINE__, argc);
|
|
pContext->err_no = EINVAL;
|
|
RETURN_BOOL(false);
|
|
}
|
|
|
|
group_name = NULL;
|
|
group_nlen = 0;
|
|
tracker_obj = NULL;
|
|
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|sa", \
|
|
&group_name, &group_nlen, &tracker_obj) == FAILURE)
|
|
{
|
|
logError("file: "__FILE__", line: %d, " \
|
|
"zend_parse_parameters fail!", __LINE__);
|
|
pContext->err_no = EINVAL;
|
|
RETURN_BOOL(false);
|
|
}
|
|
|
|
if (tracker_obj == NULL)
|
|
{
|
|
pTrackerServer = tracker_get_connection_no_pool( \
|
|
pContext->pTrackerGroup);
|
|
if (pTrackerServer == NULL)
|
|
{
|
|
pContext->err_no = ENOENT;
|
|
RETURN_BOOL(false);
|
|
}
|
|
saved_tracker_sock = -1;
|
|
tracker_hash = NULL;
|
|
}
|
|
else
|
|
{
|
|
pTrackerServer = &tracker_server;
|
|
tracker_hash = Z_ARRVAL_P(tracker_obj);
|
|
if ((result=php_fdfs_get_server_from_hash(tracker_hash, \
|
|
pTrackerServer)) != 0)
|
|
{
|
|
pContext->err_no = result;
|
|
RETURN_BOOL(false);
|
|
}
|
|
saved_tracker_sock = pTrackerServer->sock;
|
|
}
|
|
|
|
if (group_name != NULL && group_nlen > 0)
|
|
{
|
|
snprintf(new_group_name, sizeof(new_group_name), "%s", group_name);
|
|
result = tracker_query_storage_store_with_group(pTrackerServer,\
|
|
new_group_name, &storage_server, &store_path_index);
|
|
}
|
|
else
|
|
{
|
|
*new_group_name = '\0';
|
|
result = tracker_query_storage_store_without_group( \
|
|
pTrackerServer, &storage_server, new_group_name, \
|
|
&store_path_index);
|
|
}
|
|
|
|
if (tracker_hash != NULL && pTrackerServer->sock != \
|
|
saved_tracker_sock)
|
|
{
|
|
CLEAR_HASH_SOCK_FIELD(tracker_hash)
|
|
}
|
|
|
|
pContext->err_no = result;
|
|
if (result != 0)
|
|
{
|
|
if (tracker_obj == NULL)
|
|
{
|
|
conn_pool_disconnect_server(pTrackerServer);
|
|
}
|
|
RETURN_BOOL(false);
|
|
}
|
|
|
|
array_init(return_value);
|
|
add_assoc_stringl_ex(return_value, "ip_addr", \
|
|
sizeof("ip_addr"), storage_server.ip_addr, \
|
|
strlen(storage_server.ip_addr), 1);
|
|
add_assoc_long_ex(return_value, "port", sizeof("port"), \
|
|
storage_server.port);
|
|
add_assoc_long_ex(return_value, "sock", sizeof("sock"), -1);
|
|
add_assoc_long_ex(return_value, "store_path_index", \
|
|
sizeof("store_path_index"), \
|
|
store_path_index);
|
|
}
|
|
|
|
static void php_fdfs_tracker_query_storage_store_list_impl( \
|
|
INTERNAL_FUNCTION_PARAMETERS, \
|
|
FDFSPhpContext *pContext)
|
|
{
|
|
int argc;
|
|
char *group_name;
|
|
char new_group_name[FDFS_GROUP_NAME_MAX_LEN + 1];
|
|
int group_nlen;
|
|
zval *server_info_array;
|
|
zval *tracker_obj;
|
|
HashTable *tracker_hash;
|
|
ConnectionInfo tracker_server;
|
|
ConnectionInfo storage_servers[FDFS_MAX_SERVERS_EACH_GROUP];
|
|
ConnectionInfo *pTrackerServer;
|
|
ConnectionInfo *pServer;
|
|
ConnectionInfo *pServerEnd;
|
|
int store_path_index;
|
|
int saved_tracker_sock;
|
|
int result;
|
|
int storage_count;
|
|
|
|
argc = ZEND_NUM_ARGS();
|
|
if (argc > 2)
|
|
{
|
|
logError("file: "__FILE__", line: %d, " \
|
|
"tracker_query_storage_store_list parameters " \
|
|
"count: %d > 2", __LINE__, argc);
|
|
pContext->err_no = EINVAL;
|
|
RETURN_BOOL(false);
|
|
}
|
|
|
|
group_name = NULL;
|
|
group_nlen = 0;
|
|
tracker_obj = NULL;
|
|
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|sa", \
|
|
&group_name, &group_nlen, &tracker_obj) == FAILURE)
|
|
{
|
|
logError("file: "__FILE__", line: %d, " \
|
|
"zend_parse_parameters fail!", __LINE__);
|
|
pContext->err_no = EINVAL;
|
|
RETURN_BOOL(false);
|
|
}
|
|
|
|
if (tracker_obj == NULL)
|
|
{
|
|
pTrackerServer = tracker_get_connection_no_pool( \
|
|
pContext->pTrackerGroup);
|
|
if (pTrackerServer == NULL)
|
|
{
|
|
pContext->err_no = ENOENT;
|
|
RETURN_BOOL(false);
|
|
}
|
|
saved_tracker_sock = -1;
|
|
tracker_hash = NULL;
|
|
}
|
|
else
|
|
{
|
|
pTrackerServer = &tracker_server;
|
|
tracker_hash = Z_ARRVAL_P(tracker_obj);
|
|
if ((result=php_fdfs_get_server_from_hash(tracker_hash, \
|
|
pTrackerServer)) != 0)
|
|
{
|
|
pContext->err_no = result;
|
|
RETURN_BOOL(false);
|
|
}
|
|
saved_tracker_sock = pTrackerServer->sock;
|
|
}
|
|
|
|
if (group_name != NULL && group_nlen > 0)
|
|
{
|
|
snprintf(new_group_name, sizeof(new_group_name), "%s", group_name);
|
|
result = tracker_query_storage_store_list_with_group(pTrackerServer,\
|
|
new_group_name, storage_servers, FDFS_MAX_SERVERS_EACH_GROUP, \
|
|
&storage_count, &store_path_index);
|
|
}
|
|
else
|
|
{
|
|
*new_group_name = '\0';
|
|
result = tracker_query_storage_store_list_without_group( \
|
|
pTrackerServer, storage_servers, \
|
|
FDFS_MAX_SERVERS_EACH_GROUP, &storage_count, \
|
|
new_group_name, &store_path_index);
|
|
}
|
|
|
|
if (tracker_hash != NULL && pTrackerServer->sock != \
|
|
saved_tracker_sock)
|
|
{
|
|
CLEAR_HASH_SOCK_FIELD(tracker_hash)
|
|
}
|
|
|
|
pContext->err_no = result;
|
|
if (result != 0)
|
|
{
|
|
if (tracker_obj == NULL)
|
|
{
|
|
conn_pool_disconnect_server(pTrackerServer);
|
|
}
|
|
RETURN_BOOL(false);
|
|
}
|
|
|
|
array_init(return_value);
|
|
|
|
pServerEnd = storage_servers + storage_count;
|
|
for (pServer=storage_servers; pServer<pServerEnd; pServer++)
|
|
{
|
|
ALLOC_INIT_ZVAL(server_info_array);
|
|
array_init(server_info_array);
|
|
|
|
add_index_zval(return_value, pServer - storage_servers, \
|
|
server_info_array);
|
|
|
|
add_assoc_stringl_ex(server_info_array, "ip_addr", \
|
|
sizeof("ip_addr"), pServer->ip_addr, \
|
|
strlen(pServer->ip_addr), 1);
|
|
add_assoc_long_ex(server_info_array, "port", sizeof("port"), \
|
|
pServer->port);
|
|
add_assoc_long_ex(server_info_array, "sock", sizeof("sock"), -1);
|
|
add_assoc_long_ex(server_info_array, "store_path_index", \
|
|
sizeof("store_path_index"), \
|
|
store_path_index);
|
|
}
|
|
}
|
|
|
|
static void php_fdfs_tracker_do_query_storage_impl( \
|
|
INTERNAL_FUNCTION_PARAMETERS, \
|
|
FDFSPhpContext *pContext, const byte cmd, \
|
|
const bool bFileId)
|
|
{
|
|
int argc;
|
|
char *group_name;
|
|
char *remote_filename;
|
|
int group_nlen;
|
|
int filename_len;
|
|
zval *tracker_obj;
|
|
HashTable *tracker_hash;
|
|
ConnectionInfo tracker_server;
|
|
ConnectionInfo storage_server;
|
|
ConnectionInfo *pTrackerServer;
|
|
int result;
|
|
int min_param_count;
|
|
int max_param_count;
|
|
int saved_tracker_sock;
|
|
char new_file_id[FDFS_GROUP_NAME_MAX_LEN + 128];
|
|
|
|
if (bFileId)
|
|
{
|
|
min_param_count = 1;
|
|
max_param_count = 2;
|
|
}
|
|
else
|
|
{
|
|
min_param_count = 2;
|
|
max_param_count = 3;
|
|
}
|
|
|
|
argc = ZEND_NUM_ARGS();
|
|
if (argc < min_param_count || argc > max_param_count)
|
|
{
|
|
logError("file: "__FILE__", line: %d, " \
|
|
"tracker_do_query_storage parameters " \
|
|
"count: %d < %d or > %d", __LINE__, argc, \
|
|
min_param_count, max_param_count);
|
|
pContext->err_no = EINVAL;
|
|
RETURN_BOOL(false);
|
|
}
|
|
|
|
tracker_obj = NULL;
|
|
if (bFileId)
|
|
{
|
|
char *pSeperator;
|
|
char *file_id;
|
|
int file_id_len;
|
|
|
|
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|a", \
|
|
&file_id, &file_id_len, &tracker_obj) == FAILURE)
|
|
{
|
|
logError("file: "__FILE__", line: %d, " \
|
|
"zend_parse_parameters fail!", __LINE__);
|
|
pContext->err_no = EINVAL;
|
|
RETURN_BOOL(false);
|
|
}
|
|
|
|
snprintf(new_file_id, sizeof(new_file_id), "%s", file_id);
|
|
pSeperator = strchr(new_file_id, FDFS_FILE_ID_SEPERATOR);
|
|
if (pSeperator == NULL)
|
|
{
|
|
logError("file: "__FILE__", line: %d, " \
|
|
"file_id is invalid, file_id=%s", \
|
|
__LINE__, file_id);
|
|
pContext->err_no = EINVAL;
|
|
RETURN_BOOL(false);
|
|
}
|
|
|
|
*pSeperator = '\0';
|
|
group_name = new_file_id;
|
|
remote_filename = pSeperator + 1;
|
|
}
|
|
else if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ss|a", \
|
|
&group_name, &group_nlen, &remote_filename, &filename_len, \
|
|
&tracker_obj) == FAILURE)
|
|
{
|
|
logError("file: "__FILE__", line: %d, " \
|
|
"zend_parse_parameters fail!", __LINE__);
|
|
pContext->err_no = EINVAL;
|
|
RETURN_BOOL(false);
|
|
}
|
|
|
|
if (tracker_obj == NULL)
|
|
{
|
|
pTrackerServer = tracker_get_connection_no_pool( \
|
|
pContext->pTrackerGroup);
|
|
if (pTrackerServer == NULL)
|
|
{
|
|
pContext->err_no = ENOENT;
|
|
RETURN_BOOL(false);
|
|
}
|
|
saved_tracker_sock = -1;
|
|
tracker_hash = NULL;
|
|
}
|
|
else
|
|
{
|
|
pTrackerServer = &tracker_server;
|
|
tracker_hash = Z_ARRVAL_P(tracker_obj);
|
|
if ((result=php_fdfs_get_server_from_hash(tracker_hash, \
|
|
pTrackerServer)) != 0)
|
|
{
|
|
pContext->err_no = result;
|
|
RETURN_BOOL(false);
|
|
}
|
|
saved_tracker_sock = pTrackerServer->sock;
|
|
}
|
|
|
|
result = tracker_do_query_storage(pTrackerServer, &storage_server, \
|
|
cmd, group_name, remote_filename);
|
|
|
|
if (tracker_hash != NULL && pTrackerServer->sock != \
|
|
saved_tracker_sock)
|
|
{
|
|
CLEAR_HASH_SOCK_FIELD(tracker_hash)
|
|
}
|
|
|
|
pContext->err_no = result;
|
|
if (result != 0)
|
|
{
|
|
if (tracker_obj == NULL)
|
|
{
|
|
conn_pool_disconnect_server(pTrackerServer);
|
|
}
|
|
RETURN_BOOL(false);
|
|
}
|
|
|
|
array_init(return_value);
|
|
add_assoc_stringl_ex(return_value, "ip_addr", \
|
|
sizeof("ip_addr"), storage_server.ip_addr, \
|
|
strlen(storage_server.ip_addr), 1);
|
|
add_assoc_long_ex(return_value, "port", sizeof("port"), \
|
|
storage_server.port);
|
|
add_assoc_long_ex(return_value, "sock", sizeof("sock"), -1);
|
|
}
|
|
|
|
static void php_fdfs_tracker_delete_storage_impl( \
|
|
INTERNAL_FUNCTION_PARAMETERS,
|
|
FDFSPhpContext *pContext)
|
|
{
|
|
int argc;
|
|
int group_name_len;
|
|
int storage_ip_len;
|
|
char *group_name;
|
|
char *storage_ip;
|
|
|
|
argc = ZEND_NUM_ARGS();
|
|
if (argc != 2)
|
|
{
|
|
logError("file: "__FILE__", line: %d, " \
|
|
"tracker_delete_storage parameters " \
|
|
"count: %d != 2", __LINE__, argc);
|
|
pContext->err_no = EINVAL;
|
|
RETURN_BOOL(false);
|
|
}
|
|
|
|
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ss", \
|
|
&group_name, &group_name_len, &storage_ip, &storage_ip_len)
|
|
== FAILURE)
|
|
{
|
|
logError("file: "__FILE__", line: %d, " \
|
|
"zend_parse_parameters fail!", __LINE__);
|
|
pContext->err_no = EINVAL;
|
|
RETURN_BOOL(false);
|
|
}
|
|
|
|
if (group_name_len == 0 || storage_ip_len == 0)
|
|
{
|
|
logError("file: "__FILE__", line: %d, " \
|
|
"group name length: %d or storage ip length: %d = 0!",\
|
|
__LINE__, group_name_len, storage_ip_len);
|
|
pContext->err_no = EINVAL;
|
|
RETURN_BOOL(false);
|
|
}
|
|
|
|
pContext->err_no = tracker_delete_storage(pContext->pTrackerGroup, \
|
|
group_name, storage_ip);
|
|
if (pContext->err_no == 0)
|
|
{
|
|
RETURN_BOOL(true);
|
|
}
|
|
else
|
|
{
|
|
RETURN_BOOL(false);
|
|
}
|
|
}
|
|
|
|
static void php_fdfs_storage_delete_file_impl( \
|
|
INTERNAL_FUNCTION_PARAMETERS,
|
|
FDFSPhpContext *pContext, const bool bFileId)
|
|
{
|
|
int argc;
|
|
char *group_name;
|
|
char *remote_filename;
|
|
int group_nlen;
|
|
int filename_len;
|
|
zval *tracker_obj;
|
|
zval *storage_obj;
|
|
HashTable *tracker_hash;
|
|
HashTable *storage_hash;
|
|
ConnectionInfo tracker_server;
|
|
ConnectionInfo storage_server;
|
|
ConnectionInfo *pTrackerServer;
|
|
ConnectionInfo *pStorageServer;
|
|
int result;
|
|
int min_param_count;
|
|
int max_param_count;
|
|
int saved_tracker_sock;
|
|
int saved_storage_sock;
|
|
char new_file_id[FDFS_GROUP_NAME_MAX_LEN + 128];
|
|
|
|
if (bFileId)
|
|
{
|
|
min_param_count = 1;
|
|
max_param_count = 3;
|
|
}
|
|
else
|
|
{
|
|
min_param_count = 2;
|
|
max_param_count = 4;
|
|
}
|
|
|
|
argc = ZEND_NUM_ARGS();
|
|
if (argc < min_param_count || argc > max_param_count)
|
|
{
|
|
logError("file: "__FILE__", line: %d, " \
|
|
"storage_delete_file parameters " \
|
|
"count: %d < %d or > %d", __LINE__, argc, \
|
|
min_param_count, max_param_count);
|
|
pContext->err_no = EINVAL;
|
|
RETURN_BOOL(false);
|
|
}
|
|
|
|
tracker_obj = NULL;
|
|
storage_obj = NULL;
|
|
if (bFileId)
|
|
{
|
|
char *pSeperator;
|
|
char *file_id;
|
|
int file_id_len;
|
|
|
|
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|aa", \
|
|
&file_id, &file_id_len, &tracker_obj, &storage_obj) \
|
|
== FAILURE)
|
|
{
|
|
logError("file: "__FILE__", line: %d, " \
|
|
"zend_parse_parameters fail!", __LINE__);
|
|
pContext->err_no = EINVAL;
|
|
RETURN_BOOL(false);
|
|
}
|
|
|
|
snprintf(new_file_id, sizeof(new_file_id), "%s", file_id);
|
|
pSeperator = strchr(new_file_id, FDFS_FILE_ID_SEPERATOR);
|
|
if (pSeperator == NULL)
|
|
{
|
|
logError("file: "__FILE__", line: %d, " \
|
|
"file_id is invalid, file_id=%s", \
|
|
__LINE__, file_id);
|
|
pContext->err_no = EINVAL;
|
|
RETURN_BOOL(false);
|
|
}
|
|
|
|
*pSeperator = '\0';
|
|
group_name = new_file_id;
|
|
remote_filename = pSeperator + 1;
|
|
}
|
|
else if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ss|aa", \
|
|
&group_name, &group_nlen, &remote_filename, &filename_len, \
|
|
&tracker_obj, &storage_obj) == FAILURE)
|
|
{
|
|
logError("file: "__FILE__", line: %d, " \
|
|
"zend_parse_parameters fail!", __LINE__);
|
|
pContext->err_no = EINVAL;
|
|
RETURN_BOOL(false);
|
|
}
|
|
|
|
if (tracker_obj == NULL)
|
|
{
|
|
pTrackerServer = tracker_get_connection_no_pool( \
|
|
pContext->pTrackerGroup);
|
|
if (pTrackerServer == NULL)
|
|
{
|
|
pContext->err_no = ENOENT;
|
|
RETURN_BOOL(false);
|
|
}
|
|
saved_tracker_sock = -1;
|
|
tracker_hash = NULL;
|
|
}
|
|
else
|
|
{
|
|
pTrackerServer = &tracker_server;
|
|
tracker_hash = Z_ARRVAL_P(tracker_obj);
|
|
if ((result=php_fdfs_get_server_from_hash(tracker_hash, \
|
|
pTrackerServer)) != 0)
|
|
{
|
|
pContext->err_no = result;
|
|
RETURN_BOOL(false);
|
|
}
|
|
saved_tracker_sock = pTrackerServer->sock;
|
|
}
|
|
|
|
if (storage_obj == NULL)
|
|
{
|
|
pStorageServer = NULL;
|
|
storage_hash = NULL;
|
|
saved_storage_sock = -1;
|
|
}
|
|
else
|
|
{
|
|
pStorageServer = &storage_server;
|
|
storage_hash = Z_ARRVAL_P(storage_obj);
|
|
if ((result=php_fdfs_get_server_from_hash(storage_hash, \
|
|
pStorageServer)) != 0)
|
|
{
|
|
pContext->err_no = result;
|
|
RETURN_BOOL(false);
|
|
}
|
|
saved_storage_sock = pStorageServer->sock;
|
|
}
|
|
|
|
result = storage_delete_file(pTrackerServer, pStorageServer, \
|
|
group_name, remote_filename);
|
|
if (tracker_hash != NULL && pTrackerServer->sock != \
|
|
saved_tracker_sock)
|
|
{
|
|
CLEAR_HASH_SOCK_FIELD(tracker_hash)
|
|
}
|
|
if (pStorageServer != NULL && pStorageServer->sock != \
|
|
saved_storage_sock)
|
|
{
|
|
CLEAR_HASH_SOCK_FIELD(storage_hash)
|
|
}
|
|
|
|
pContext->err_no = result;
|
|
if (result != 0)
|
|
{
|
|
if (tracker_obj == NULL)
|
|
{
|
|
conn_pool_disconnect_server(pTrackerServer);
|
|
}
|
|
RETURN_BOOL(false);
|
|
}
|
|
|
|
RETURN_BOOL(true);
|
|
}
|
|
|
|
static void php_fdfs_storage_truncate_file_impl( \
|
|
INTERNAL_FUNCTION_PARAMETERS,
|
|
FDFSPhpContext *pContext, const bool bFileId)
|
|
{
|
|
int argc;
|
|
char *group_name;
|
|
char *remote_filename;
|
|
int group_nlen;
|
|
int filename_len;
|
|
zval *tracker_obj;
|
|
zval *storage_obj;
|
|
HashTable *tracker_hash;
|
|
HashTable *storage_hash;
|
|
ConnectionInfo tracker_server;
|
|
ConnectionInfo storage_server;
|
|
ConnectionInfo *pTrackerServer;
|
|
ConnectionInfo *pStorageServer;
|
|
int result;
|
|
int min_param_count;
|
|
int max_param_count;
|
|
int saved_tracker_sock;
|
|
int saved_storage_sock;
|
|
long truncated_file_size = 0;
|
|
char new_file_id[FDFS_GROUP_NAME_MAX_LEN + 128];
|
|
|
|
if (bFileId)
|
|
{
|
|
min_param_count = 1;
|
|
max_param_count = 4;
|
|
}
|
|
else
|
|
{
|
|
min_param_count = 2;
|
|
max_param_count = 5;
|
|
}
|
|
|
|
argc = ZEND_NUM_ARGS();
|
|
if (argc < min_param_count || argc > max_param_count)
|
|
{
|
|
logError("file: "__FILE__", line: %d, " \
|
|
"storage_truncate_file parameters " \
|
|
"count: %d < %d or > %d", __LINE__, argc, \
|
|
min_param_count, max_param_count);
|
|
pContext->err_no = EINVAL;
|
|
RETURN_BOOL(false);
|
|
}
|
|
|
|
tracker_obj = NULL;
|
|
storage_obj = NULL;
|
|
if (bFileId)
|
|
{
|
|
char *pSeperator;
|
|
char *file_id;
|
|
int file_id_len;
|
|
|
|
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, \
|
|
"s|laa", &file_id, &file_id_len, \
|
|
&truncated_file_size, &tracker_obj, \
|
|
&storage_obj) == FAILURE)
|
|
{
|
|
logError("file: "__FILE__", line: %d, " \
|
|
"zend_parse_parameters fail!", __LINE__);
|
|
pContext->err_no = EINVAL;
|
|
RETURN_BOOL(false);
|
|
}
|
|
|
|
snprintf(new_file_id, sizeof(new_file_id), "%s", file_id);
|
|
pSeperator = strchr(new_file_id, FDFS_FILE_ID_SEPERATOR);
|
|
if (pSeperator == NULL)
|
|
{
|
|
logError("file: "__FILE__", line: %d, " \
|
|
"file_id is invalid, file_id=%s", \
|
|
__LINE__, file_id);
|
|
pContext->err_no = EINVAL;
|
|
RETURN_BOOL(false);
|
|
}
|
|
|
|
*pSeperator = '\0';
|
|
group_name = new_file_id;
|
|
remote_filename = pSeperator + 1;
|
|
}
|
|
else if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, \
|
|
"ss|laa", &group_name, &group_nlen, &remote_filename, \
|
|
&filename_len, &truncated_file_size, &tracker_obj, \
|
|
&storage_obj) == FAILURE)
|
|
{
|
|
logError("file: "__FILE__", line: %d, " \
|
|
"zend_parse_parameters fail!", __LINE__);
|
|
pContext->err_no = EINVAL;
|
|
RETURN_BOOL(false);
|
|
}
|
|
|
|
if (tracker_obj == NULL)
|
|
{
|
|
pTrackerServer = tracker_get_connection_no_pool( \
|
|
pContext->pTrackerGroup);
|
|
if (pTrackerServer == NULL)
|
|
{
|
|
pContext->err_no = ENOENT;
|
|
RETURN_BOOL(false);
|
|
}
|
|
saved_tracker_sock = -1;
|
|
tracker_hash = NULL;
|
|
}
|
|
else
|
|
{
|
|
pTrackerServer = &tracker_server;
|
|
tracker_hash = Z_ARRVAL_P(tracker_obj);
|
|
if ((result=php_fdfs_get_server_from_hash(tracker_hash, \
|
|
pTrackerServer)) != 0)
|
|
{
|
|
pContext->err_no = result;
|
|
RETURN_BOOL(false);
|
|
}
|
|
saved_tracker_sock = pTrackerServer->sock;
|
|
}
|
|
|
|
if (storage_obj == NULL)
|
|
{
|
|
pStorageServer = NULL;
|
|
storage_hash = NULL;
|
|
saved_storage_sock = -1;
|
|
}
|
|
else
|
|
{
|
|
pStorageServer = &storage_server;
|
|
storage_hash = Z_ARRVAL_P(storage_obj);
|
|
if ((result=php_fdfs_get_server_from_hash(storage_hash, \
|
|
pStorageServer)) != 0)
|
|
{
|
|
pContext->err_no = result;
|
|
RETURN_BOOL(false);
|
|
}
|
|
saved_storage_sock = pStorageServer->sock;
|
|
}
|
|
|
|
result = storage_truncate_file(pTrackerServer, pStorageServer, \
|
|
group_name, remote_filename, truncated_file_size);
|
|
if (tracker_hash != NULL && pTrackerServer->sock != \
|
|
saved_tracker_sock)
|
|
{
|
|
CLEAR_HASH_SOCK_FIELD(tracker_hash)
|
|
}
|
|
if (pStorageServer != NULL && pStorageServer->sock != \
|
|
saved_storage_sock)
|
|
{
|
|
CLEAR_HASH_SOCK_FIELD(storage_hash)
|
|
}
|
|
|
|
pContext->err_no = result;
|
|
if (result != 0)
|
|
{
|
|
if (tracker_obj == NULL)
|
|
{
|
|
conn_pool_disconnect_server(pTrackerServer);
|
|
}
|
|
RETURN_BOOL(false);
|
|
}
|
|
|
|
RETURN_BOOL(true);
|
|
}
|
|
|
|
static void php_fdfs_storage_download_file_to_callback_impl( \
|
|
INTERNAL_FUNCTION_PARAMETERS, FDFSPhpContext *pContext, \
|
|
const bool bFileId)
|
|
{
|
|
int argc;
|
|
char *group_name;
|
|
char *remote_filename;
|
|
zval *download_callback;
|
|
int group_nlen;
|
|
int filename_len;
|
|
long file_offset;
|
|
long download_bytes;
|
|
int64_t file_size;
|
|
zval *tracker_obj;
|
|
zval *storage_obj;
|
|
HashTable *tracker_hash;
|
|
HashTable *storage_hash;
|
|
ConnectionInfo tracker_server;
|
|
ConnectionInfo storage_server;
|
|
ConnectionInfo *pTrackerServer;
|
|
ConnectionInfo *pStorageServer;
|
|
HashTable *callback_hash;
|
|
php_fdfs_callback_t php_callback;
|
|
int result;
|
|
int min_param_count;
|
|
int max_param_count;
|
|
int saved_tracker_sock;
|
|
int saved_storage_sock;
|
|
char new_file_id[FDFS_GROUP_NAME_MAX_LEN + 128];
|
|
|
|
if (bFileId)
|
|
{
|
|
min_param_count = 2;
|
|
max_param_count = 6;
|
|
}
|
|
else
|
|
{
|
|
min_param_count = 3;
|
|
max_param_count = 7;
|
|
}
|
|
|
|
argc = ZEND_NUM_ARGS();
|
|
if (argc < min_param_count || argc > max_param_count)
|
|
{
|
|
logError("file: "__FILE__", line: %d, " \
|
|
"storage_download_file_to_buff parameters " \
|
|
"count: %d < %d or > %d", __LINE__, argc, \
|
|
min_param_count, max_param_count);
|
|
pContext->err_no = EINVAL;
|
|
RETURN_BOOL(false);
|
|
}
|
|
|
|
file_offset = 0;
|
|
download_bytes = 0;
|
|
tracker_obj = NULL;
|
|
storage_obj = NULL;
|
|
if (bFileId)
|
|
{
|
|
char *pSeperator;
|
|
char *file_id;
|
|
int file_id_len;
|
|
|
|
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, \
|
|
"sa|llaa", &file_id, &file_id_len, \
|
|
&download_callback, &file_offset, &download_bytes, \
|
|
&tracker_obj, &storage_obj) == FAILURE)
|
|
{
|
|
logError("file: "__FILE__", line: %d, " \
|
|
"zend_parse_parameters fail!", __LINE__);
|
|
pContext->err_no = EINVAL;
|
|
RETURN_BOOL(false);
|
|
}
|
|
|
|
snprintf(new_file_id, sizeof(new_file_id), "%s", file_id);
|
|
pSeperator = strchr(new_file_id, FDFS_FILE_ID_SEPERATOR);
|
|
if (pSeperator == NULL)
|
|
{
|
|
logError("file: "__FILE__", line: %d, " \
|
|
"file_id is invalid, file_id=%s", \
|
|
__LINE__, file_id);
|
|
pContext->err_no = EINVAL;
|
|
RETURN_BOOL(false);
|
|
}
|
|
|
|
*pSeperator = '\0';
|
|
group_name = new_file_id;
|
|
remote_filename = pSeperator + 1;
|
|
}
|
|
else if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ssa|llaa", \
|
|
&group_name, &group_nlen, &remote_filename, &filename_len, \
|
|
&download_callback, &file_offset, &download_bytes, \
|
|
&tracker_obj, &storage_obj) == FAILURE)
|
|
{
|
|
logError("file: "__FILE__", line: %d, " \
|
|
"zend_parse_parameters fail!", __LINE__);
|
|
pContext->err_no = EINVAL;
|
|
RETURN_BOOL(false);
|
|
}
|
|
|
|
if (tracker_obj == NULL)
|
|
{
|
|
pTrackerServer = tracker_get_connection_no_pool( \
|
|
pContext->pTrackerGroup);
|
|
if (pTrackerServer == NULL)
|
|
{
|
|
pContext->err_no = ENOENT;
|
|
RETURN_BOOL(false);
|
|
}
|
|
saved_tracker_sock = -1;
|
|
tracker_hash = NULL;
|
|
}
|
|
else
|
|
{
|
|
pTrackerServer = &tracker_server;
|
|
tracker_hash = Z_ARRVAL_P(tracker_obj);
|
|
if ((result=php_fdfs_get_server_from_hash(tracker_hash, \
|
|
pTrackerServer)) != 0)
|
|
{
|
|
pContext->err_no = result;
|
|
RETURN_BOOL(false);
|
|
}
|
|
saved_tracker_sock = pTrackerServer->sock;
|
|
}
|
|
|
|
if (storage_obj == NULL)
|
|
{
|
|
pStorageServer = NULL;
|
|
storage_hash = NULL;
|
|
saved_storage_sock = -1;
|
|
}
|
|
else
|
|
{
|
|
pStorageServer = &storage_server;
|
|
storage_hash = Z_ARRVAL_P(storage_obj);
|
|
if ((result=php_fdfs_get_server_from_hash(storage_hash, \
|
|
pStorageServer)) != 0)
|
|
{
|
|
pContext->err_no = result;
|
|
RETURN_BOOL(false);
|
|
}
|
|
saved_storage_sock = pStorageServer->sock;
|
|
}
|
|
|
|
callback_hash = Z_ARRVAL_P(download_callback);
|
|
result = php_fdfs_get_callback_from_hash(callback_hash, \
|
|
&php_callback);
|
|
if (result != 0)
|
|
{
|
|
if (tracker_obj == NULL)
|
|
{
|
|
conn_pool_disconnect_server(pTrackerServer);
|
|
}
|
|
pContext->err_no = result;
|
|
RETURN_BOOL(false);
|
|
}
|
|
|
|
result = storage_download_file_ex(pTrackerServer, pStorageServer, \
|
|
group_name, remote_filename, file_offset, download_bytes, \
|
|
php_fdfs_download_callback, (void *)&php_callback, &file_size);
|
|
if (tracker_hash != NULL && pTrackerServer->sock != saved_tracker_sock)
|
|
{
|
|
CLEAR_HASH_SOCK_FIELD(tracker_hash)
|
|
}
|
|
if (pStorageServer != NULL && pStorageServer->sock != \
|
|
saved_storage_sock)
|
|
{
|
|
CLEAR_HASH_SOCK_FIELD(storage_hash)
|
|
}
|
|
|
|
if (result != 0)
|
|
{
|
|
if (tracker_obj == NULL)
|
|
{
|
|
conn_pool_disconnect_server(pTrackerServer);
|
|
}
|
|
pContext->err_no = result;
|
|
RETURN_BOOL(false);
|
|
}
|
|
RETURN_BOOL(true);
|
|
}
|
|
|
|
static void php_fdfs_storage_download_file_to_buff_impl( \
|
|
INTERNAL_FUNCTION_PARAMETERS, FDFSPhpContext *pContext, \
|
|
const bool bFileId)
|
|
{
|
|
int argc;
|
|
char *group_name;
|
|
char *remote_filename;
|
|
char *file_buff;
|
|
char *new_file_buff;
|
|
int group_nlen;
|
|
int filename_len;
|
|
long file_offset;
|
|
long download_bytes;
|
|
int64_t file_size;
|
|
zval *tracker_obj;
|
|
zval *storage_obj;
|
|
HashTable *tracker_hash;
|
|
HashTable *storage_hash;
|
|
ConnectionInfo tracker_server;
|
|
ConnectionInfo storage_server;
|
|
ConnectionInfo *pTrackerServer;
|
|
ConnectionInfo *pStorageServer;
|
|
int result;
|
|
int min_param_count;
|
|
int max_param_count;
|
|
int saved_tracker_sock;
|
|
int saved_storage_sock;
|
|
char new_file_id[FDFS_GROUP_NAME_MAX_LEN + 128];
|
|
|
|
if (bFileId)
|
|
{
|
|
min_param_count = 1;
|
|
max_param_count = 5;
|
|
}
|
|
else
|
|
{
|
|
min_param_count = 2;
|
|
max_param_count = 6;
|
|
}
|
|
|
|
argc = ZEND_NUM_ARGS();
|
|
if (argc < min_param_count || argc > max_param_count)
|
|
{
|
|
logError("file: "__FILE__", line: %d, " \
|
|
"storage_download_file_to_buff parameters " \
|
|
"count: %d < %d or > %d", __LINE__, argc, \
|
|
min_param_count, max_param_count);
|
|
pContext->err_no = EINVAL;
|
|
RETURN_BOOL(false);
|
|
}
|
|
|
|
file_offset = 0;
|
|
download_bytes = 0;
|
|
tracker_obj = NULL;
|
|
storage_obj = NULL;
|
|
if (bFileId)
|
|
{
|
|
char *pSeperator;
|
|
char *file_id;
|
|
int file_id_len;
|
|
|
|
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|llaa", \
|
|
&file_id, &file_id_len, &file_offset, &download_bytes, \
|
|
&tracker_obj, &storage_obj) == FAILURE)
|
|
{
|
|
logError("file: "__FILE__", line: %d, " \
|
|
"zend_parse_parameters fail!", __LINE__);
|
|
pContext->err_no = EINVAL;
|
|
RETURN_BOOL(false);
|
|
}
|
|
|
|
snprintf(new_file_id, sizeof(new_file_id), "%s", file_id);
|
|
pSeperator = strchr(new_file_id, FDFS_FILE_ID_SEPERATOR);
|
|
if (pSeperator == NULL)
|
|
{
|
|
logError("file: "__FILE__", line: %d, " \
|
|
"file_id is invalid, file_id=%s", \
|
|
__LINE__, file_id);
|
|
pContext->err_no = EINVAL;
|
|
RETURN_BOOL(false);
|
|
}
|
|
|
|
*pSeperator = '\0';
|
|
group_name = new_file_id;
|
|
remote_filename = pSeperator + 1;
|
|
}
|
|
else if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ss|llaa", \
|
|
&group_name, &group_nlen, &remote_filename, &filename_len, \
|
|
&file_offset, &download_bytes, &tracker_obj, &storage_obj) \
|
|
== FAILURE)
|
|
{
|
|
logError("file: "__FILE__", line: %d, " \
|
|
"zend_parse_parameters fail!", __LINE__);
|
|
pContext->err_no = EINVAL;
|
|
RETURN_BOOL(false);
|
|
}
|
|
|
|
if (tracker_obj == NULL)
|
|
{
|
|
pTrackerServer = tracker_get_connection_no_pool( \
|
|
pContext->pTrackerGroup);
|
|
if (pTrackerServer == NULL)
|
|
{
|
|
pContext->err_no = ENOENT;
|
|
RETURN_BOOL(false);
|
|
}
|
|
saved_tracker_sock = -1;
|
|
tracker_hash = NULL;
|
|
}
|
|
else
|
|
{
|
|
pTrackerServer = &tracker_server;
|
|
tracker_hash = Z_ARRVAL_P(tracker_obj);
|
|
if ((result=php_fdfs_get_server_from_hash(tracker_hash, \
|
|
pTrackerServer)) != 0)
|
|
{
|
|
pContext->err_no = result;
|
|
RETURN_BOOL(false);
|
|
}
|
|
saved_tracker_sock = pTrackerServer->sock;
|
|
}
|
|
|
|
if (storage_obj == NULL)
|
|
{
|
|
pStorageServer = NULL;
|
|
storage_hash = NULL;
|
|
saved_storage_sock = -1;
|
|
}
|
|
else
|
|
{
|
|
pStorageServer = &storage_server;
|
|
storage_hash = Z_ARRVAL_P(storage_obj);
|
|
if ((result=php_fdfs_get_server_from_hash(storage_hash, \
|
|
pStorageServer)) != 0)
|
|
{
|
|
pContext->err_no = result;
|
|
RETURN_BOOL(false);
|
|
}
|
|
saved_storage_sock = pStorageServer->sock;
|
|
}
|
|
|
|
result=storage_do_download_file_ex(pTrackerServer, pStorageServer, \
|
|
FDFS_DOWNLOAD_TO_BUFF, group_name, remote_filename, \
|
|
file_offset, download_bytes, &file_buff, NULL, &file_size);
|
|
if (tracker_hash != NULL && pTrackerServer->sock != \
|
|
saved_tracker_sock)
|
|
{
|
|
CLEAR_HASH_SOCK_FIELD(tracker_hash)
|
|
}
|
|
if (pStorageServer != NULL && pStorageServer->sock != \
|
|
saved_storage_sock)
|
|
{
|
|
CLEAR_HASH_SOCK_FIELD(storage_hash)
|
|
}
|
|
|
|
if (result != 0)
|
|
{
|
|
if (tracker_obj == NULL)
|
|
{
|
|
conn_pool_disconnect_server(pTrackerServer);
|
|
}
|
|
pContext->err_no = result;
|
|
RETURN_BOOL(false);
|
|
}
|
|
|
|
new_file_buff = (char *)emalloc(file_size + 1);
|
|
if (new_file_buff == NULL)
|
|
{
|
|
logError("file: "__FILE__", line: %d, " \
|
|
"emalloc %d bytes fail, errno: %d, error info: %s", \
|
|
__LINE__, (int)file_size + 1, errno, STRERROR(errno));
|
|
free(file_buff);
|
|
pContext->err_no = errno != 0 ? errno : ENOMEM;
|
|
RETURN_BOOL(false);
|
|
}
|
|
|
|
memcpy(new_file_buff, file_buff, file_size);
|
|
*(new_file_buff + file_size) = '\0';
|
|
free(file_buff);
|
|
|
|
pContext->err_no = 0;
|
|
RETURN_STRINGL(new_file_buff, file_size, 0);
|
|
}
|
|
|
|
static void php_fdfs_storage_download_file_to_file_impl( \
|
|
INTERNAL_FUNCTION_PARAMETERS, FDFSPhpContext *pContext, \
|
|
const bool bFileId)
|
|
{
|
|
int argc;
|
|
char *group_name;
|
|
char *remote_filename;
|
|
char *local_filename;
|
|
int group_nlen;
|
|
int remote_file_nlen;
|
|
int local_file_nlen;
|
|
long file_offset;
|
|
long download_bytes;
|
|
int64_t file_size;
|
|
zval *tracker_obj;
|
|
zval *storage_obj;
|
|
HashTable *tracker_hash;
|
|
HashTable *storage_hash;
|
|
ConnectionInfo tracker_server;
|
|
ConnectionInfo storage_server;
|
|
ConnectionInfo *pTrackerServer;
|
|
ConnectionInfo *pStorageServer;
|
|
int result;
|
|
int min_param_count;
|
|
int max_param_count;
|
|
int saved_tracker_sock;
|
|
int saved_storage_sock;
|
|
char new_file_id[FDFS_GROUP_NAME_MAX_LEN + 128];
|
|
|
|
if (bFileId)
|
|
{
|
|
min_param_count = 2;
|
|
max_param_count = 6;
|
|
}
|
|
else
|
|
{
|
|
min_param_count = 3;
|
|
max_param_count = 7;
|
|
}
|
|
|
|
argc = ZEND_NUM_ARGS();
|
|
if (argc < min_param_count || argc > max_param_count)
|
|
{
|
|
logError("file: "__FILE__", line: %d, " \
|
|
"storage_set_metadata parameters " \
|
|
"count: %d < %d or > %d", __LINE__, argc, \
|
|
min_param_count, max_param_count);
|
|
pContext->err_no = EINVAL;
|
|
RETURN_BOOL(false);
|
|
}
|
|
|
|
file_offset = 0;
|
|
download_bytes = 0;
|
|
tracker_obj = NULL;
|
|
storage_obj = NULL;
|
|
if (bFileId)
|
|
{
|
|
char *pSeperator;
|
|
char *file_id;
|
|
int file_id_len;
|
|
|
|
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ss|llaa",\
|
|
&file_id, &file_id_len, &local_filename, \
|
|
&local_file_nlen, &file_offset, &download_bytes, \
|
|
&tracker_obj, &storage_obj) == FAILURE)
|
|
{
|
|
logError("file: "__FILE__", line: %d, " \
|
|
"zend_parse_parameters fail!", __LINE__);
|
|
pContext->err_no = EINVAL;
|
|
RETURN_BOOL(false);
|
|
}
|
|
|
|
snprintf(new_file_id, sizeof(new_file_id), "%s", file_id);
|
|
pSeperator = strchr(new_file_id, FDFS_FILE_ID_SEPERATOR);
|
|
if (pSeperator == NULL)
|
|
{
|
|
logError("file: "__FILE__", line: %d, " \
|
|
"file_id is invalid, file_id=%s", \
|
|
__LINE__, file_id);
|
|
pContext->err_no = EINVAL;
|
|
RETURN_BOOL(false);
|
|
}
|
|
|
|
*pSeperator = '\0';
|
|
group_name = new_file_id;
|
|
remote_filename = pSeperator + 1;
|
|
}
|
|
else if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "sss|llaa", \
|
|
&group_name, &group_nlen, &remote_filename, &remote_file_nlen,\
|
|
&local_filename, &local_file_nlen, &file_offset, \
|
|
&download_bytes, &tracker_obj, &storage_obj) == FAILURE)
|
|
{
|
|
logError("file: "__FILE__", line: %d, " \
|
|
"zend_parse_parameters fail!", __LINE__);
|
|
pContext->err_no = EINVAL;
|
|
RETURN_BOOL(false);
|
|
}
|
|
|
|
if (tracker_obj == NULL)
|
|
{
|
|
pTrackerServer = tracker_get_connection_no_pool( \
|
|
pContext->pTrackerGroup);
|
|
if (pTrackerServer == NULL)
|
|
{
|
|
pContext->err_no = ENOENT;
|
|
RETURN_BOOL(false);
|
|
}
|
|
saved_tracker_sock = -1;
|
|
tracker_hash = NULL;
|
|
}
|
|
else
|
|
{
|
|
pTrackerServer = &tracker_server;
|
|
tracker_hash = Z_ARRVAL_P(tracker_obj);
|
|
if ((result=php_fdfs_get_server_from_hash(tracker_hash, \
|
|
pTrackerServer)) != 0)
|
|
{
|
|
pContext->err_no = result;
|
|
RETURN_BOOL(false);
|
|
}
|
|
saved_tracker_sock = pTrackerServer->sock;
|
|
}
|
|
|
|
if (storage_obj == NULL)
|
|
{
|
|
pStorageServer = NULL;
|
|
storage_hash = NULL;
|
|
saved_storage_sock = -1;
|
|
}
|
|
else
|
|
{
|
|
pStorageServer = &storage_server;
|
|
storage_hash = Z_ARRVAL_P(storage_obj);
|
|
if ((result=php_fdfs_get_server_from_hash(storage_hash, \
|
|
pStorageServer)) != 0)
|
|
{
|
|
pContext->err_no = result;
|
|
RETURN_BOOL(false);
|
|
}
|
|
saved_storage_sock = pStorageServer->sock;
|
|
}
|
|
|
|
result=storage_do_download_file_ex(pTrackerServer, pStorageServer, \
|
|
FDFS_DOWNLOAD_TO_FILE, group_name, remote_filename, \
|
|
file_offset, download_bytes, &local_filename, NULL, &file_size);
|
|
if (tracker_hash != NULL && pTrackerServer->sock != \
|
|
saved_tracker_sock)
|
|
{
|
|
CLEAR_HASH_SOCK_FIELD(tracker_hash)
|
|
}
|
|
if (pStorageServer != NULL && pStorageServer->sock != \
|
|
saved_storage_sock)
|
|
{
|
|
CLEAR_HASH_SOCK_FIELD(storage_hash)
|
|
}
|
|
|
|
pContext->err_no = result;
|
|
if (result != 0)
|
|
{
|
|
if (tracker_obj == NULL)
|
|
{
|
|
conn_pool_disconnect_server(pTrackerServer);
|
|
}
|
|
RETURN_BOOL(false);
|
|
}
|
|
else
|
|
{
|
|
RETURN_BOOL(true);
|
|
}
|
|
}
|
|
|
|
static void php_fdfs_storage_get_metadata_impl( \
|
|
INTERNAL_FUNCTION_PARAMETERS, FDFSPhpContext *pContext, \
|
|
const bool bFileId)
|
|
{
|
|
int argc;
|
|
char *group_name;
|
|
char *remote_filename;
|
|
int group_nlen;
|
|
int filename_len;
|
|
zval *tracker_obj;
|
|
zval *storage_obj;
|
|
HashTable *tracker_hash;
|
|
HashTable *storage_hash;
|
|
ConnectionInfo tracker_server;
|
|
ConnectionInfo storage_server;
|
|
ConnectionInfo *pTrackerServer;
|
|
ConnectionInfo *pStorageServer;
|
|
FDFSMetaData *meta_list;
|
|
FDFSMetaData *pMetaData;
|
|
FDFSMetaData *pMetaEnd;
|
|
int meta_count;
|
|
int result;
|
|
int min_param_count;
|
|
int max_param_count;
|
|
int saved_tracker_sock;
|
|
int saved_storage_sock;
|
|
char new_file_id[FDFS_GROUP_NAME_MAX_LEN + 128];
|
|
|
|
if (bFileId)
|
|
{
|
|
min_param_count = 1;
|
|
max_param_count = 3;
|
|
}
|
|
else
|
|
{
|
|
min_param_count = 2;
|
|
max_param_count = 4;
|
|
}
|
|
|
|
argc = ZEND_NUM_ARGS();
|
|
if (argc < min_param_count || argc > max_param_count)
|
|
{
|
|
logError("file: "__FILE__", line: %d, " \
|
|
"storage_get_metadata parameters " \
|
|
"count: %d < %d or > %d", __LINE__, argc, \
|
|
min_param_count, max_param_count);
|
|
pContext->err_no = EINVAL;
|
|
RETURN_BOOL(false);
|
|
}
|
|
|
|
tracker_obj = NULL;
|
|
storage_obj = NULL;
|
|
if (bFileId)
|
|
{
|
|
char *pSeperator;
|
|
char *file_id;
|
|
int file_id_len;
|
|
|
|
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|aa", \
|
|
&file_id, &file_id_len, &tracker_obj, &storage_obj) \
|
|
== FAILURE)
|
|
{
|
|
logError("file: "__FILE__", line: %d, " \
|
|
"zend_parse_parameters fail!", __LINE__);
|
|
pContext->err_no = EINVAL;
|
|
RETURN_BOOL(false);
|
|
}
|
|
|
|
snprintf(new_file_id, sizeof(new_file_id), "%s", file_id);
|
|
pSeperator = strchr(new_file_id, FDFS_FILE_ID_SEPERATOR);
|
|
if (pSeperator == NULL)
|
|
{
|
|
logError("file: "__FILE__", line: %d, " \
|
|
"file_id is invalid, file_id=%s", \
|
|
__LINE__, file_id);
|
|
pContext->err_no = EINVAL;
|
|
RETURN_BOOL(false);
|
|
}
|
|
|
|
*pSeperator = '\0';
|
|
group_name = new_file_id;
|
|
remote_filename = pSeperator + 1;
|
|
}
|
|
else if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ss|aa", \
|
|
&group_name, &group_nlen, &remote_filename, &filename_len, \
|
|
&tracker_obj, &storage_obj) == FAILURE)
|
|
{
|
|
logError("file: "__FILE__", line: %d, " \
|
|
"zend_parse_parameters fail!", __LINE__);
|
|
pContext->err_no = EINVAL;
|
|
RETURN_BOOL(false);
|
|
}
|
|
|
|
if (tracker_obj == NULL)
|
|
{
|
|
pTrackerServer = tracker_get_connection_no_pool( \
|
|
pContext->pTrackerGroup);
|
|
if (pTrackerServer == NULL)
|
|
{
|
|
pContext->err_no = ENOENT;
|
|
RETURN_BOOL(false);
|
|
}
|
|
saved_tracker_sock = -1;
|
|
tracker_hash = NULL;
|
|
}
|
|
else
|
|
{
|
|
pTrackerServer = &tracker_server;
|
|
tracker_hash = Z_ARRVAL_P(tracker_obj);
|
|
if ((result=php_fdfs_get_server_from_hash(tracker_hash, \
|
|
pTrackerServer)) != 0)
|
|
{
|
|
pContext->err_no = result;
|
|
RETURN_BOOL(false);
|
|
}
|
|
saved_tracker_sock = pTrackerServer->sock;
|
|
}
|
|
|
|
if (storage_obj == NULL)
|
|
{
|
|
pStorageServer = NULL;
|
|
storage_hash = NULL;
|
|
saved_storage_sock = -1;
|
|
}
|
|
else
|
|
{
|
|
pStorageServer = &storage_server;
|
|
storage_hash = Z_ARRVAL_P(storage_obj);
|
|
if ((result=php_fdfs_get_server_from_hash(storage_hash, \
|
|
pStorageServer)) != 0)
|
|
{
|
|
pContext->err_no = result;
|
|
RETURN_BOOL(false);
|
|
}
|
|
saved_storage_sock = pStorageServer->sock;
|
|
}
|
|
|
|
result = storage_get_metadata(pTrackerServer, pStorageServer, \
|
|
group_name, remote_filename, &meta_list, &meta_count);
|
|
if (tracker_hash != NULL && pTrackerServer->sock != \
|
|
saved_tracker_sock)
|
|
{
|
|
CLEAR_HASH_SOCK_FIELD(tracker_hash)
|
|
}
|
|
if (pStorageServer != NULL && pStorageServer->sock != \
|
|
saved_storage_sock)
|
|
{
|
|
CLEAR_HASH_SOCK_FIELD(storage_hash)
|
|
}
|
|
|
|
pContext->err_no = result;
|
|
if (result != 0)
|
|
{
|
|
if (tracker_obj == NULL)
|
|
{
|
|
conn_pool_disconnect_server(pTrackerServer);
|
|
}
|
|
RETURN_BOOL(false);
|
|
}
|
|
|
|
array_init(return_value);
|
|
if (meta_list != NULL)
|
|
{
|
|
pMetaEnd = meta_list + meta_count;
|
|
for (pMetaData=meta_list; pMetaData<pMetaEnd; pMetaData++)
|
|
{
|
|
add_assoc_stringl_ex(return_value, pMetaData->name, \
|
|
strlen(pMetaData->name)+1, pMetaData->value,\
|
|
strlen(pMetaData->value), 1);
|
|
}
|
|
|
|
free(meta_list);
|
|
}
|
|
}
|
|
|
|
static void php_fdfs_storage_file_exist_impl( \
|
|
INTERNAL_FUNCTION_PARAMETERS, FDFSPhpContext *pContext, \
|
|
const bool bFileId)
|
|
{
|
|
int argc;
|
|
char *group_name;
|
|
char *remote_filename;
|
|
int group_nlen;
|
|
int filename_len;
|
|
zval *tracker_obj;
|
|
zval *storage_obj;
|
|
HashTable *tracker_hash;
|
|
HashTable *storage_hash;
|
|
ConnectionInfo tracker_server;
|
|
ConnectionInfo storage_server;
|
|
ConnectionInfo *pTrackerServer;
|
|
ConnectionInfo *pStorageServer;
|
|
int result;
|
|
int min_param_count;
|
|
int max_param_count;
|
|
int saved_tracker_sock;
|
|
int saved_storage_sock;
|
|
char new_file_id[FDFS_GROUP_NAME_MAX_LEN + 128];
|
|
|
|
if (bFileId)
|
|
{
|
|
min_param_count = 1;
|
|
max_param_count = 3;
|
|
}
|
|
else
|
|
{
|
|
min_param_count = 2;
|
|
max_param_count = 4;
|
|
}
|
|
|
|
argc = ZEND_NUM_ARGS();
|
|
if (argc < min_param_count || argc > max_param_count)
|
|
{
|
|
logError("file: "__FILE__", line: %d, " \
|
|
"storage_file_exist parameters " \
|
|
"count: %d < %d or > %d", __LINE__, argc, \
|
|
min_param_count, max_param_count);
|
|
pContext->err_no = EINVAL;
|
|
RETURN_BOOL(false);
|
|
}
|
|
|
|
tracker_obj = NULL;
|
|
storage_obj = NULL;
|
|
if (bFileId)
|
|
{
|
|
char *pSeperator;
|
|
char *file_id;
|
|
int file_id_len;
|
|
|
|
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|aa", \
|
|
&file_id, &file_id_len, &tracker_obj, &storage_obj) \
|
|
== FAILURE)
|
|
{
|
|
logError("file: "__FILE__", line: %d, " \
|
|
"zend_parse_parameters fail!", __LINE__);
|
|
pContext->err_no = EINVAL;
|
|
RETURN_BOOL(false);
|
|
}
|
|
|
|
snprintf(new_file_id, sizeof(new_file_id), "%s", file_id);
|
|
pSeperator = strchr(new_file_id, FDFS_FILE_ID_SEPERATOR);
|
|
if (pSeperator == NULL)
|
|
{
|
|
logError("file: "__FILE__", line: %d, " \
|
|
"file_id is invalid, file_id=%s", \
|
|
__LINE__, file_id);
|
|
pContext->err_no = EINVAL;
|
|
RETURN_BOOL(false);
|
|
}
|
|
|
|
*pSeperator = '\0';
|
|
group_name = new_file_id;
|
|
remote_filename = pSeperator + 1;
|
|
}
|
|
else if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ss|aa", \
|
|
&group_name, &group_nlen, &remote_filename, &filename_len, \
|
|
&tracker_obj, &storage_obj) == FAILURE)
|
|
{
|
|
logError("file: "__FILE__", line: %d, " \
|
|
"zend_parse_parameters fail!", __LINE__);
|
|
pContext->err_no = EINVAL;
|
|
RETURN_BOOL(false);
|
|
}
|
|
|
|
if (tracker_obj == NULL)
|
|
{
|
|
pTrackerServer = tracker_get_connection_no_pool( \
|
|
pContext->pTrackerGroup);
|
|
if (pTrackerServer == NULL)
|
|
{
|
|
pContext->err_no = ENOENT;
|
|
RETURN_BOOL(false);
|
|
}
|
|
saved_tracker_sock = -1;
|
|
tracker_hash = NULL;
|
|
}
|
|
else
|
|
{
|
|
pTrackerServer = &tracker_server;
|
|
tracker_hash = Z_ARRVAL_P(tracker_obj);
|
|
if ((result=php_fdfs_get_server_from_hash(tracker_hash, \
|
|
pTrackerServer)) != 0)
|
|
{
|
|
pContext->err_no = result;
|
|
RETURN_BOOL(false);
|
|
}
|
|
saved_tracker_sock = pTrackerServer->sock;
|
|
}
|
|
|
|
if (storage_obj == NULL)
|
|
{
|
|
pStorageServer = NULL;
|
|
storage_hash = NULL;
|
|
saved_storage_sock = -1;
|
|
}
|
|
else
|
|
{
|
|
pStorageServer = &storage_server;
|
|
storage_hash = Z_ARRVAL_P(storage_obj);
|
|
if ((result=php_fdfs_get_server_from_hash(storage_hash, \
|
|
pStorageServer)) != 0)
|
|
{
|
|
pContext->err_no = result;
|
|
RETURN_BOOL(false);
|
|
}
|
|
saved_storage_sock = pStorageServer->sock;
|
|
}
|
|
|
|
result = storage_file_exist(pTrackerServer, pStorageServer, \
|
|
group_name, remote_filename);
|
|
if (tracker_hash != NULL && pTrackerServer->sock != \
|
|
saved_tracker_sock)
|
|
{
|
|
CLEAR_HASH_SOCK_FIELD(tracker_hash)
|
|
}
|
|
if (pStorageServer != NULL && pStorageServer->sock != \
|
|
saved_storage_sock)
|
|
{
|
|
CLEAR_HASH_SOCK_FIELD(storage_hash)
|
|
}
|
|
|
|
pContext->err_no = result;
|
|
if (result == 0)
|
|
{
|
|
RETURN_BOOL(true);
|
|
}
|
|
else
|
|
{
|
|
RETURN_BOOL(false);
|
|
}
|
|
}
|
|
|
|
static void php_fdfs_tracker_query_storage_list_impl( \
|
|
INTERNAL_FUNCTION_PARAMETERS, \
|
|
FDFSPhpContext *pContext, const bool bFileId)
|
|
{
|
|
int argc;
|
|
char *group_name;
|
|
char *remote_filename;
|
|
int group_nlen;
|
|
int filename_len;
|
|
zval *tracker_obj;
|
|
zval *server_info_array;
|
|
HashTable *tracker_hash;
|
|
ConnectionInfo tracker_server;
|
|
ConnectionInfo storage_servers[FDFS_MAX_SERVERS_EACH_GROUP];
|
|
ConnectionInfo *pTrackerServer;
|
|
ConnectionInfo *pServer;
|
|
ConnectionInfo *pServerEnd;
|
|
int result;
|
|
int server_count;
|
|
int min_param_count;
|
|
int max_param_count;
|
|
int saved_tracker_sock;
|
|
char new_file_id[FDFS_GROUP_NAME_MAX_LEN + 128];
|
|
|
|
if (bFileId)
|
|
{
|
|
min_param_count = 1;
|
|
max_param_count = 2;
|
|
}
|
|
else
|
|
{
|
|
min_param_count = 2;
|
|
max_param_count = 3;
|
|
}
|
|
|
|
argc = ZEND_NUM_ARGS();
|
|
if (argc < min_param_count || argc > max_param_count)
|
|
{
|
|
logError("file: "__FILE__", line: %d, " \
|
|
"fastdfs_tracker_query_storage_list parameters " \
|
|
"count: %d < %d or > %d", __LINE__, argc, \
|
|
min_param_count, max_param_count);
|
|
pContext->err_no = EINVAL;
|
|
RETURN_BOOL(false);
|
|
}
|
|
|
|
tracker_obj = NULL;
|
|
if (bFileId)
|
|
{
|
|
char *pSeperator;
|
|
char *file_id;
|
|
int file_id_len;
|
|
|
|
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|a", \
|
|
&file_id, &file_id_len, &tracker_obj) == FAILURE)
|
|
{
|
|
logError("file: "__FILE__", line: %d, " \
|
|
"zend_parse_parameters fail!", __LINE__);
|
|
pContext->err_no = EINVAL;
|
|
RETURN_BOOL(false);
|
|
}
|
|
|
|
snprintf(new_file_id, sizeof(new_file_id), "%s", file_id);
|
|
pSeperator = strchr(new_file_id, FDFS_FILE_ID_SEPERATOR);
|
|
if (pSeperator == NULL)
|
|
{
|
|
logError("file: "__FILE__", line: %d, " \
|
|
"file_id is invalid, file_id=%s", \
|
|
__LINE__, file_id);
|
|
pContext->err_no = EINVAL;
|
|
RETURN_BOOL(false);
|
|
}
|
|
|
|
*pSeperator = '\0';
|
|
group_name = new_file_id;
|
|
remote_filename = pSeperator + 1;
|
|
}
|
|
else if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ss|a", \
|
|
&group_name, &group_nlen, &remote_filename, &filename_len, \
|
|
&tracker_obj) == FAILURE)
|
|
{
|
|
logError("file: "__FILE__", line: %d, " \
|
|
"zend_parse_parameters fail!", __LINE__);
|
|
pContext->err_no = EINVAL;
|
|
RETURN_BOOL(false);
|
|
}
|
|
|
|
if (tracker_obj == NULL)
|
|
{
|
|
pTrackerServer = tracker_get_connection_no_pool( \
|
|
pContext->pTrackerGroup);
|
|
if (pTrackerServer == NULL)
|
|
{
|
|
pContext->err_no = ENOENT;
|
|
RETURN_BOOL(false);
|
|
}
|
|
saved_tracker_sock = -1;
|
|
tracker_hash = NULL;
|
|
}
|
|
else
|
|
{
|
|
pTrackerServer = &tracker_server;
|
|
tracker_hash = Z_ARRVAL_P(tracker_obj);
|
|
if ((result=php_fdfs_get_server_from_hash(tracker_hash, \
|
|
pTrackerServer)) != 0)
|
|
{
|
|
pContext->err_no = result;
|
|
RETURN_BOOL(false);
|
|
}
|
|
saved_tracker_sock = pTrackerServer->sock;
|
|
}
|
|
|
|
result = tracker_query_storage_list(pTrackerServer, storage_servers, \
|
|
FDFS_MAX_SERVERS_EACH_GROUP, &server_count, \
|
|
group_name, remote_filename);
|
|
if (tracker_hash != NULL && pTrackerServer->sock != \
|
|
saved_tracker_sock)
|
|
{
|
|
CLEAR_HASH_SOCK_FIELD(tracker_hash)
|
|
}
|
|
pContext->err_no = result;
|
|
if (result != 0)
|
|
{
|
|
if (tracker_obj == NULL)
|
|
{
|
|
conn_pool_disconnect_server(pTrackerServer);
|
|
}
|
|
RETURN_BOOL(false);
|
|
}
|
|
|
|
array_init(return_value);
|
|
|
|
pServerEnd = storage_servers + server_count;
|
|
for (pServer=storage_servers; pServer<pServerEnd; pServer++)
|
|
{
|
|
ALLOC_INIT_ZVAL(server_info_array);
|
|
array_init(server_info_array);
|
|
|
|
add_index_zval(return_value, pServer - storage_servers, \
|
|
server_info_array);
|
|
|
|
add_assoc_stringl_ex(server_info_array, "ip_addr", \
|
|
sizeof("ip_addr"), pServer->ip_addr, \
|
|
strlen(pServer->ip_addr), 1);
|
|
add_assoc_long_ex(server_info_array, "port", sizeof("port"), \
|
|
pServer->port);
|
|
add_assoc_long_ex(server_info_array,"sock",sizeof("sock"),-1);
|
|
}
|
|
}
|
|
|
|
static int php_fdfs_upload_callback(void *arg, const int64_t file_size, int sock)
|
|
{
|
|
php_fdfs_upload_callback_t *pUploadCallback;
|
|
zval *args[2];
|
|
zval zsock;
|
|
zval ret;
|
|
zval null_args;
|
|
int result;
|
|
TSRMLS_FETCH();
|
|
|
|
ZVAL_NULL(&ret);
|
|
ZVAL_LONG(&zsock, sock);
|
|
|
|
pUploadCallback = (php_fdfs_upload_callback_t *)arg;
|
|
if (pUploadCallback->callback.args == NULL)
|
|
{
|
|
ZVAL_NULL(&null_args);
|
|
pUploadCallback->callback.args = &null_args;
|
|
}
|
|
args[0] = &zsock;
|
|
args[1] = pUploadCallback->callback.args;
|
|
|
|
if (call_user_function(EG(function_table), NULL, \
|
|
pUploadCallback->callback.func_name,
|
|
&ret, 2, args TSRMLS_CC) == FAILURE)
|
|
{
|
|
logError("file: "__FILE__", line: %d, " \
|
|
"call callback function: %s fail", __LINE__, \
|
|
Z_STRVAL_P(pUploadCallback->callback.func_name));
|
|
return EINVAL;
|
|
}
|
|
|
|
if (ret.type == IS_LONG || ret.type == IS_BOOL)
|
|
{
|
|
result = ret.value.lval == 0 ? EFAULT : 0;
|
|
}
|
|
else
|
|
{
|
|
logError("file: "__FILE__", line: %d, " \
|
|
"callback function return invalid value type: %d", \
|
|
__LINE__, ret.type);
|
|
result = EINVAL;
|
|
}
|
|
|
|
return result;
|
|
}
|
|
|
|
static int php_fdfs_download_callback(void *arg, const int64_t file_size, \
|
|
const char *data, const int current_size)
|
|
{
|
|
php_fdfs_callback_t *pCallback;
|
|
zval *args[3];
|
|
zval zfilesize;
|
|
zval zdata;
|
|
zval ret;
|
|
zval null_args;
|
|
int result;
|
|
TSRMLS_FETCH();
|
|
|
|
ZVAL_NULL(&ret);
|
|
ZVAL_LONG(&zfilesize, file_size);
|
|
ZVAL_STRINGL(&zdata, (char *)data, current_size, 0);
|
|
|
|
pCallback = (php_fdfs_callback_t *)arg;
|
|
if (pCallback->args == NULL)
|
|
{
|
|
ZVAL_NULL(&null_args);
|
|
pCallback->args = &null_args;
|
|
}
|
|
args[0] = pCallback->args;
|
|
args[1] = &zfilesize;
|
|
args[2] = &zdata;
|
|
if (call_user_function(EG(function_table), NULL, \
|
|
pCallback->func_name,
|
|
&ret, 3, args TSRMLS_CC) == FAILURE)
|
|
{
|
|
logError("file: "__FILE__", line: %d, " \
|
|
"call callback function: %s fail", __LINE__, \
|
|
Z_STRVAL_P(pCallback->func_name));
|
|
return EINVAL;
|
|
}
|
|
|
|
if (ret.type == IS_LONG || ret.type == IS_BOOL)
|
|
{
|
|
result = ret.value.lval == 0 ? EFAULT : 0;
|
|
}
|
|
else
|
|
{
|
|
logError("file: "__FILE__", line: %d, " \
|
|
"callback function return invalid value type: %d", \
|
|
__LINE__, ret.type);
|
|
result = EINVAL;
|
|
}
|
|
|
|
return result;
|
|
}
|
|
|
|
/*
|
|
string/array fastdfs_storage_upload_by_filename(string local_filename
|
|
[, string file_ext_name, array meta_list, string group_name,
|
|
array tracker_server, array storage_server])
|
|
return string/array for success, false for error
|
|
*/
|
|
static void php_fdfs_storage_upload_file_impl(INTERNAL_FUNCTION_PARAMETERS, \
|
|
FDFSPhpContext *pContext, const byte cmd, \
|
|
const byte upload_type, const bool bFileId)
|
|
{
|
|
int result;
|
|
int argc;
|
|
char *local_filename;
|
|
int filename_len;
|
|
char *file_ext_name;
|
|
zval *callback_obj;
|
|
zval *ext_name_obj;
|
|
zval *metadata_obj;
|
|
zval *tracker_obj;
|
|
zval *storage_obj;
|
|
zval *group_name_obj;
|
|
HashTable *tracker_hash;
|
|
HashTable *storage_hash;
|
|
ConnectionInfo tracker_server;
|
|
ConnectionInfo storage_server;
|
|
ConnectionInfo *pTrackerServer;
|
|
ConnectionInfo *pStorageServer;
|
|
FDFSMetaData *meta_list;
|
|
int meta_count;
|
|
int store_path_index;
|
|
int saved_tracker_sock;
|
|
int saved_storage_sock;
|
|
char group_name[FDFS_GROUP_NAME_MAX_LEN + 1];
|
|
char remote_filename[128];
|
|
|
|
argc = ZEND_NUM_ARGS();
|
|
if (argc < 1 || argc > 6)
|
|
{
|
|
logError("file: "__FILE__", line: %d, " \
|
|
"storage_upload_file parameters " \
|
|
"count: %d < 1 or > 6", __LINE__, argc);
|
|
pContext->err_no = EINVAL;
|
|
RETURN_BOOL(false);
|
|
}
|
|
|
|
local_filename = NULL;
|
|
filename_len = 0;
|
|
callback_obj = NULL;
|
|
ext_name_obj = NULL;
|
|
metadata_obj = NULL;
|
|
group_name_obj = NULL;
|
|
tracker_obj = NULL;
|
|
storage_obj = NULL;
|
|
if (upload_type == FDFS_UPLOAD_BY_CALLBACK)
|
|
{
|
|
result = zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, \
|
|
"a|zazaa", &callback_obj, &ext_name_obj, \
|
|
&metadata_obj, &group_name_obj, &tracker_obj, \
|
|
&storage_obj);
|
|
}
|
|
else
|
|
{
|
|
result = zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, \
|
|
"s|zazaa", &local_filename, &filename_len, \
|
|
&ext_name_obj, &metadata_obj, &group_name_obj, \
|
|
&tracker_obj, &storage_obj);
|
|
}
|
|
|
|
if (result == FAILURE)
|
|
{
|
|
logError("file: "__FILE__", line: %d, " \
|
|
"zend_parse_parameters fail!", __LINE__);
|
|
pContext->err_no = EINVAL;
|
|
RETURN_BOOL(false);
|
|
}
|
|
|
|
if (ext_name_obj == NULL)
|
|
{
|
|
file_ext_name = NULL;
|
|
}
|
|
else
|
|
{
|
|
if (ext_name_obj->type == IS_NULL)
|
|
{
|
|
file_ext_name = NULL;
|
|
}
|
|
else if (ext_name_obj->type == IS_STRING)
|
|
{
|
|
file_ext_name = ext_name_obj->value.str.val;
|
|
}
|
|
else
|
|
{
|
|
logError("file: "__FILE__", line: %d, " \
|
|
"file_ext_name is not a string, type=%d!", \
|
|
__LINE__, ext_name_obj->type);
|
|
pContext->err_no = EINVAL;
|
|
RETURN_BOOL(false);
|
|
}
|
|
}
|
|
|
|
if (group_name_obj != NULL && group_name_obj->type == IS_STRING)
|
|
{
|
|
snprintf(group_name, sizeof(group_name), "%s", \
|
|
group_name_obj->value.str.val);
|
|
}
|
|
else
|
|
{
|
|
*group_name = '\0';
|
|
}
|
|
*remote_filename = '\0';
|
|
|
|
if (tracker_obj == NULL)
|
|
{
|
|
pTrackerServer = tracker_get_connection_no_pool( \
|
|
pContext->pTrackerGroup);
|
|
if (pTrackerServer == NULL)
|
|
{
|
|
pContext->err_no = ENOENT;
|
|
RETURN_BOOL(false);
|
|
}
|
|
saved_tracker_sock = -1;
|
|
tracker_hash = NULL;
|
|
}
|
|
else
|
|
{
|
|
pTrackerServer = &tracker_server;
|
|
tracker_hash = Z_ARRVAL_P(tracker_obj);
|
|
if ((result=php_fdfs_get_server_from_hash(tracker_hash, \
|
|
pTrackerServer)) != 0)
|
|
{
|
|
pContext->err_no = result;
|
|
RETURN_BOOL(false);
|
|
}
|
|
saved_tracker_sock = pTrackerServer->sock;
|
|
}
|
|
|
|
if (storage_obj == NULL)
|
|
{
|
|
pStorageServer = NULL;
|
|
store_path_index = 0;
|
|
storage_hash = NULL;
|
|
saved_storage_sock = -1;
|
|
}
|
|
else
|
|
{
|
|
zval **data;
|
|
zval ***ppp;
|
|
|
|
pStorageServer = &storage_server;
|
|
storage_hash = Z_ARRVAL_P(storage_obj);
|
|
if ((result=php_fdfs_get_server_from_hash(storage_hash, \
|
|
pStorageServer)) != 0)
|
|
{
|
|
pContext->err_no = result;
|
|
RETURN_BOOL(false);
|
|
}
|
|
|
|
data = NULL;
|
|
ppp = &data;
|
|
if (zend_hash_find(storage_hash, "store_path_index", \
|
|
sizeof("store_path_index"), (void **)ppp) == FAILURE)
|
|
{
|
|
logError("file: "__FILE__", line: %d, " \
|
|
"key \"store_path_index\" not exist!", \
|
|
__LINE__);
|
|
pContext->err_no = ENOENT;
|
|
RETURN_BOOL(false);
|
|
}
|
|
|
|
if ((*data)->type == IS_LONG)
|
|
{
|
|
store_path_index = (*data)->value.lval;
|
|
}
|
|
else if ((*data)->type == IS_STRING)
|
|
{
|
|
store_path_index = atoi(Z_STRVAL_PP(data));
|
|
}
|
|
else
|
|
{
|
|
logError("file: "__FILE__", line: %d, " \
|
|
"key \"store_path_index\" is invalid, " \
|
|
"type=%d!", __LINE__, (*data)->type);
|
|
pContext->err_no = EINVAL;
|
|
RETURN_BOOL(false);
|
|
}
|
|
saved_storage_sock = pStorageServer->sock;
|
|
}
|
|
|
|
if (metadata_obj == NULL)
|
|
{
|
|
meta_list = NULL;
|
|
meta_count = 0;
|
|
}
|
|
else
|
|
{
|
|
result = fastdfs_convert_metadata_to_array(metadata_obj, \
|
|
&meta_list, &meta_count);
|
|
if (result != 0)
|
|
{
|
|
pContext->err_no = result;
|
|
RETURN_BOOL(false);
|
|
}
|
|
}
|
|
|
|
if (upload_type == FDFS_UPLOAD_BY_FILE)
|
|
{
|
|
result = storage_upload_by_filename_ex(pTrackerServer, pStorageServer, \
|
|
store_path_index, cmd, local_filename, file_ext_name, \
|
|
meta_list, meta_count, group_name, remote_filename);
|
|
}
|
|
else if (upload_type == FDFS_UPLOAD_BY_BUFF)
|
|
{
|
|
char *buff;
|
|
int buff_len;
|
|
|
|
buff = local_filename;
|
|
buff_len = filename_len;
|
|
|
|
result = storage_do_upload_file(pTrackerServer, pStorageServer, \
|
|
store_path_index, cmd, FDFS_UPLOAD_BY_BUFF, buff, NULL, \
|
|
buff_len, NULL, NULL, file_ext_name, meta_list, meta_count, \
|
|
group_name, remote_filename);
|
|
}
|
|
else //by callback
|
|
{
|
|
HashTable *callback_hash;
|
|
php_fdfs_upload_callback_t php_callback;
|
|
|
|
callback_hash = Z_ARRVAL_P(callback_obj);
|
|
result = php_fdfs_get_upload_callback_from_hash(callback_hash, \
|
|
&php_callback);
|
|
if (result != 0)
|
|
{
|
|
pContext->err_no = result;
|
|
RETURN_BOOL(false);
|
|
}
|
|
|
|
result = storage_upload_by_callback_ex(pTrackerServer, \
|
|
pStorageServer, store_path_index, cmd, \
|
|
php_fdfs_upload_callback, (void *)&php_callback, \
|
|
php_callback.file_size, file_ext_name, meta_list, \
|
|
meta_count, group_name, remote_filename);
|
|
}
|
|
|
|
if (tracker_hash != NULL && pTrackerServer->sock != \
|
|
saved_tracker_sock)
|
|
{
|
|
CLEAR_HASH_SOCK_FIELD(tracker_hash)
|
|
}
|
|
if (pStorageServer != NULL && pStorageServer->sock != \
|
|
saved_storage_sock)
|
|
{
|
|
CLEAR_HASH_SOCK_FIELD(storage_hash)
|
|
}
|
|
|
|
pContext->err_no = result;
|
|
if (meta_list != NULL)
|
|
{
|
|
free(meta_list);
|
|
}
|
|
if (result != 0)
|
|
{
|
|
if (tracker_obj == NULL)
|
|
{
|
|
conn_pool_disconnect_server(pTrackerServer);
|
|
}
|
|
RETURN_BOOL(false);
|
|
}
|
|
|
|
if (bFileId)
|
|
{
|
|
char file_id[FDFS_GROUP_NAME_MAX_LEN + 128];
|
|
int file_id_len;
|
|
|
|
file_id_len = sprintf(file_id, "%s%c%s", group_name, \
|
|
FDFS_FILE_ID_SEPERATOR, remote_filename);
|
|
RETURN_STRINGL(file_id, file_id_len, 1);
|
|
}
|
|
else
|
|
{
|
|
array_init(return_value);
|
|
|
|
add_assoc_stringl_ex(return_value, "group_name", \
|
|
sizeof("group_name"), group_name, \
|
|
strlen(group_name), 1);
|
|
add_assoc_stringl_ex(return_value, "filename", \
|
|
sizeof("filename"), remote_filename, \
|
|
strlen(remote_filename), 1);
|
|
}
|
|
}
|
|
|
|
static void php_fdfs_storage_upload_slave_file_impl( \
|
|
INTERNAL_FUNCTION_PARAMETERS, FDFSPhpContext *pContext, \
|
|
const byte upload_type, const bool bFileId)
|
|
{
|
|
int result;
|
|
int argc;
|
|
zval *callback_obj;
|
|
char *local_filename;
|
|
char *master_filename;
|
|
char *prefix_name;
|
|
char *file_ext_name;
|
|
zval *ext_name_obj;
|
|
zval *metadata_obj;
|
|
zval *tracker_obj;
|
|
zval *storage_obj;
|
|
char *group_name;
|
|
HashTable *tracker_hash;
|
|
HashTable *storage_hash;
|
|
ConnectionInfo tracker_server;
|
|
ConnectionInfo storage_server;
|
|
ConnectionInfo *pTrackerServer;
|
|
ConnectionInfo *pStorageServer;
|
|
FDFSMetaData *meta_list;
|
|
int meta_count;
|
|
int filename_len;
|
|
int group_name_len;
|
|
int master_filename_len;
|
|
int prefix_name_len;
|
|
int saved_tracker_sock;
|
|
int saved_storage_sock;
|
|
int min_param_count;
|
|
int max_param_count;
|
|
char new_file_id[FDFS_GROUP_NAME_MAX_LEN + 128];
|
|
char new_group_name[FDFS_GROUP_NAME_MAX_LEN + 1];
|
|
char remote_filename[128];
|
|
|
|
if (bFileId)
|
|
{
|
|
min_param_count = 3;
|
|
max_param_count = 7;
|
|
}
|
|
else
|
|
{
|
|
min_param_count = 4;
|
|
max_param_count = 8;
|
|
}
|
|
|
|
argc = ZEND_NUM_ARGS();
|
|
if (argc < min_param_count || argc > max_param_count)
|
|
{
|
|
logError("file: "__FILE__", line: %d, " \
|
|
"storage_upload_slave_file parameters " \
|
|
"count: %d < %d or > %d", __LINE__, argc, \
|
|
min_param_count, max_param_count);
|
|
pContext->err_no = EINVAL;
|
|
RETURN_BOOL(false);
|
|
}
|
|
|
|
local_filename = NULL;
|
|
filename_len = 0;
|
|
callback_obj = NULL;
|
|
ext_name_obj = NULL;
|
|
metadata_obj = NULL;
|
|
tracker_obj = NULL;
|
|
storage_obj = NULL;
|
|
if (bFileId)
|
|
{
|
|
char *pSeperator;
|
|
char *master_file_id;
|
|
int master_file_id_len;
|
|
|
|
if (upload_type == FDFS_UPLOAD_BY_CALLBACK)
|
|
{
|
|
result = zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, \
|
|
"ass|zaaa", &callback_obj, \
|
|
&master_file_id, &master_file_id_len, \
|
|
&prefix_name, &prefix_name_len, &ext_name_obj, \
|
|
&metadata_obj, &tracker_obj, &storage_obj);
|
|
}
|
|
else
|
|
{
|
|
result = zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, \
|
|
"sss|zaaa", &local_filename, &filename_len, \
|
|
&master_file_id, &master_file_id_len, \
|
|
&prefix_name, &prefix_name_len, &ext_name_obj, \
|
|
&metadata_obj, &tracker_obj, &storage_obj);
|
|
}
|
|
if (result == FAILURE)
|
|
{
|
|
logError("file: "__FILE__", line: %d, " \
|
|
"zend_parse_parameters fail!", __LINE__);
|
|
pContext->err_no = EINVAL;
|
|
RETURN_BOOL(false);
|
|
}
|
|
|
|
snprintf(new_file_id, sizeof(new_file_id), "%s", master_file_id);
|
|
pSeperator = strchr(new_file_id, FDFS_FILE_ID_SEPERATOR);
|
|
if (pSeperator == NULL)
|
|
{
|
|
logError("file: "__FILE__", line: %d, " \
|
|
"master_file_id is invalid, master_file_id=%s",\
|
|
__LINE__, master_file_id);
|
|
pContext->err_no = EINVAL;
|
|
RETURN_BOOL(false);
|
|
}
|
|
|
|
*pSeperator = '\0';
|
|
group_name = new_file_id;
|
|
master_filename = pSeperator + 1;
|
|
}
|
|
else
|
|
{
|
|
if (upload_type == FDFS_UPLOAD_BY_CALLBACK)
|
|
{
|
|
result = zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC,
|
|
"asss|zaaa", &callback_obj, \
|
|
&group_name, &group_name_len, \
|
|
&master_filename, &master_filename_len, \
|
|
&prefix_name, &prefix_name_len, &ext_name_obj,\
|
|
&metadata_obj, &tracker_obj, &storage_obj);
|
|
}
|
|
else
|
|
{
|
|
result = zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC,
|
|
"ssss|zaaa", &local_filename, &filename_len, \
|
|
&group_name, &group_name_len, \
|
|
&master_filename, &master_filename_len, \
|
|
&prefix_name, &prefix_name_len, &ext_name_obj,\
|
|
&metadata_obj, &tracker_obj, &storage_obj);
|
|
}
|
|
if (result == FAILURE)
|
|
{
|
|
logError("file: "__FILE__", line: %d, " \
|
|
"zend_parse_parameters fail!", __LINE__);
|
|
pContext->err_no = EINVAL;
|
|
RETURN_BOOL(false);
|
|
}
|
|
}
|
|
|
|
if (ext_name_obj == NULL)
|
|
{
|
|
file_ext_name = NULL;
|
|
}
|
|
else
|
|
{
|
|
if (ext_name_obj->type == IS_NULL)
|
|
{
|
|
file_ext_name = NULL;
|
|
}
|
|
else if (ext_name_obj->type == IS_STRING)
|
|
{
|
|
file_ext_name = ext_name_obj->value.str.val;
|
|
}
|
|
else
|
|
{
|
|
logError("file: "__FILE__", line: %d, " \
|
|
"file_ext_name is not a string, type=%d!", \
|
|
__LINE__, ext_name_obj->type);
|
|
pContext->err_no = EINVAL;
|
|
RETURN_BOOL(false);
|
|
}
|
|
}
|
|
|
|
*remote_filename = '\0';
|
|
if (tracker_obj == NULL)
|
|
{
|
|
pTrackerServer = tracker_get_connection_no_pool( \
|
|
pContext->pTrackerGroup);
|
|
if (pTrackerServer == NULL)
|
|
{
|
|
pContext->err_no = ENOENT;
|
|
RETURN_BOOL(false);
|
|
}
|
|
saved_tracker_sock = -1;
|
|
tracker_hash = NULL;
|
|
}
|
|
else
|
|
{
|
|
pTrackerServer = &tracker_server;
|
|
tracker_hash = Z_ARRVAL_P(tracker_obj);
|
|
if ((result=php_fdfs_get_server_from_hash(tracker_hash, \
|
|
pTrackerServer)) != 0)
|
|
{
|
|
pContext->err_no = result;
|
|
RETURN_BOOL(false);
|
|
}
|
|
saved_tracker_sock = pTrackerServer->sock;
|
|
}
|
|
|
|
if (storage_obj == NULL)
|
|
{
|
|
pStorageServer = NULL;
|
|
storage_hash = NULL;
|
|
saved_storage_sock = -1;
|
|
}
|
|
else
|
|
{
|
|
pStorageServer = &storage_server;
|
|
storage_hash = Z_ARRVAL_P(storage_obj);
|
|
if ((result=php_fdfs_get_server_from_hash(storage_hash, \
|
|
pStorageServer)) != 0)
|
|
{
|
|
pContext->err_no = result;
|
|
RETURN_BOOL(false);
|
|
}
|
|
|
|
saved_storage_sock = pStorageServer->sock;
|
|
}
|
|
|
|
if (metadata_obj == NULL)
|
|
{
|
|
meta_list = NULL;
|
|
meta_count = 0;
|
|
}
|
|
else
|
|
{
|
|
result = fastdfs_convert_metadata_to_array(metadata_obj, \
|
|
&meta_list, &meta_count);
|
|
if (result != 0)
|
|
{
|
|
pContext->err_no = result;
|
|
RETURN_BOOL(false);
|
|
}
|
|
}
|
|
|
|
snprintf(new_group_name, sizeof(new_group_name), "%s", group_name);
|
|
if (upload_type == FDFS_UPLOAD_BY_FILE)
|
|
{
|
|
result = storage_upload_slave_by_filename(pTrackerServer, \
|
|
pStorageServer, local_filename, master_filename, \
|
|
prefix_name, file_ext_name, meta_list, meta_count, \
|
|
new_group_name, remote_filename);
|
|
}
|
|
else if (upload_type == FDFS_UPLOAD_BY_BUFF)
|
|
{
|
|
result = storage_upload_slave_by_filebuff(pTrackerServer, \
|
|
pStorageServer, local_filename, filename_len, \
|
|
master_filename, prefix_name, file_ext_name, \
|
|
meta_list, meta_count, new_group_name, remote_filename);
|
|
}
|
|
else //by callback
|
|
{
|
|
HashTable *callback_hash;
|
|
php_fdfs_upload_callback_t php_callback;
|
|
|
|
callback_hash = Z_ARRVAL_P(callback_obj);
|
|
result = php_fdfs_get_upload_callback_from_hash(callback_hash, \
|
|
&php_callback);
|
|
if (result != 0)
|
|
{
|
|
pContext->err_no = result;
|
|
RETURN_BOOL(false);
|
|
}
|
|
|
|
result = storage_upload_slave_by_callback(pTrackerServer, \
|
|
pStorageServer, php_fdfs_upload_callback, \
|
|
(void *)&php_callback, php_callback.file_size, \
|
|
master_filename, prefix_name, file_ext_name, meta_list,\
|
|
meta_count, new_group_name, remote_filename);
|
|
}
|
|
|
|
if (tracker_hash != NULL && pTrackerServer->sock != \
|
|
saved_tracker_sock)
|
|
{
|
|
CLEAR_HASH_SOCK_FIELD(tracker_hash)
|
|
}
|
|
if (pStorageServer != NULL && pStorageServer->sock != \
|
|
saved_storage_sock)
|
|
{
|
|
CLEAR_HASH_SOCK_FIELD(storage_hash)
|
|
}
|
|
|
|
pContext->err_no = result;
|
|
if (meta_list != NULL)
|
|
{
|
|
free(meta_list);
|
|
}
|
|
if (result != 0)
|
|
{
|
|
if (tracker_obj == NULL)
|
|
{
|
|
conn_pool_disconnect_server(pTrackerServer);
|
|
}
|
|
RETURN_BOOL(false);
|
|
}
|
|
|
|
if (bFileId)
|
|
{
|
|
char file_id[FDFS_GROUP_NAME_MAX_LEN + 128];
|
|
int file_id_len;
|
|
|
|
file_id_len = sprintf(file_id, "%s%c%s", new_group_name, \
|
|
FDFS_FILE_ID_SEPERATOR, remote_filename);
|
|
RETURN_STRINGL(file_id, file_id_len, 1);
|
|
}
|
|
else
|
|
{
|
|
array_init(return_value);
|
|
|
|
add_assoc_stringl_ex(return_value, "group_name", \
|
|
sizeof("group_name"), new_group_name, \
|
|
strlen(new_group_name), 1);
|
|
add_assoc_stringl_ex(return_value, "filename", \
|
|
sizeof("filename"), remote_filename, \
|
|
strlen(remote_filename), 1);
|
|
}
|
|
}
|
|
|
|
/*
|
|
boolean fastdfs_storage_append_by_filename(string local_filename,
|
|
string group_name, appender_filename,
|
|
[array tracker_server, array storage_server])
|
|
return true for success, false for error
|
|
*/
|
|
static void php_fdfs_storage_append_file_impl( \
|
|
INTERNAL_FUNCTION_PARAMETERS, FDFSPhpContext *pContext, \
|
|
const byte upload_type, const bool bFileId)
|
|
{
|
|
int result;
|
|
int argc;
|
|
zval *callback_obj;
|
|
char *local_filename;
|
|
char *appender_filename;
|
|
zval *tracker_obj;
|
|
zval *storage_obj;
|
|
char *group_name;
|
|
HashTable *tracker_hash;
|
|
HashTable *storage_hash;
|
|
ConnectionInfo tracker_server;
|
|
ConnectionInfo storage_server;
|
|
ConnectionInfo *pTrackerServer;
|
|
ConnectionInfo *pStorageServer;
|
|
char new_file_id[FDFS_GROUP_NAME_MAX_LEN + 128];
|
|
int filename_len;
|
|
int group_name_len;
|
|
int appender_filename_len;
|
|
int saved_tracker_sock;
|
|
int saved_storage_sock;
|
|
int min_param_count;
|
|
int max_param_count;
|
|
|
|
if (bFileId)
|
|
{
|
|
min_param_count = 2;
|
|
max_param_count = 4;
|
|
}
|
|
else
|
|
{
|
|
min_param_count = 3;
|
|
max_param_count = 5;
|
|
}
|
|
|
|
argc = ZEND_NUM_ARGS();
|
|
if (argc < min_param_count || argc > max_param_count)
|
|
{
|
|
logError("file: "__FILE__", line: %d, " \
|
|
"storage_append_file parameters " \
|
|
"count: %d < %d or > %d", __LINE__, argc, \
|
|
min_param_count, max_param_count);
|
|
pContext->err_no = EINVAL;
|
|
RETURN_BOOL(false);
|
|
}
|
|
|
|
local_filename = NULL;
|
|
filename_len = 0;
|
|
callback_obj = NULL;
|
|
tracker_obj = NULL;
|
|
storage_obj = NULL;
|
|
if (bFileId)
|
|
{
|
|
char *pSeperator;
|
|
char *appender_file_id;
|
|
int appender_file_id_len;
|
|
|
|
if (upload_type == FDFS_UPLOAD_BY_CALLBACK)
|
|
{
|
|
result = zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, \
|
|
"as|aa", &callback_obj, &appender_file_id, \
|
|
&appender_file_id_len, &tracker_obj, &storage_obj);
|
|
}
|
|
else
|
|
{
|
|
result = zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, \
|
|
"ss|aa", &local_filename, &filename_len, \
|
|
&appender_file_id, &appender_file_id_len, \
|
|
&tracker_obj, &storage_obj);
|
|
}
|
|
if (result == FAILURE)
|
|
{
|
|
logError("file: "__FILE__", line: %d, " \
|
|
"zend_parse_parameters fail!", __LINE__);
|
|
pContext->err_no = EINVAL;
|
|
RETURN_BOOL(false);
|
|
}
|
|
|
|
snprintf(new_file_id, sizeof(new_file_id), "%s", appender_file_id);
|
|
pSeperator = strchr(new_file_id, FDFS_FILE_ID_SEPERATOR);
|
|
if (pSeperator == NULL)
|
|
{
|
|
logError("file: "__FILE__", line: %d, " \
|
|
"appender_file_id is invalid, " \
|
|
"appender_file_id=%s", \
|
|
__LINE__, appender_file_id);
|
|
pContext->err_no = EINVAL;
|
|
RETURN_BOOL(false);
|
|
}
|
|
|
|
*pSeperator = '\0';
|
|
group_name = new_file_id;
|
|
appender_filename = pSeperator + 1;
|
|
}
|
|
else
|
|
{
|
|
if (upload_type == FDFS_UPLOAD_BY_CALLBACK)
|
|
{
|
|
result = zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, \
|
|
"ass|aa", &callback_obj, &group_name, &group_name_len, \
|
|
&appender_filename, &appender_filename_len, \
|
|
&tracker_obj, &storage_obj);
|
|
}
|
|
else
|
|
{
|
|
result = zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, \
|
|
"sss|aa", &local_filename, &filename_len, \
|
|
&group_name, &group_name_len, \
|
|
&appender_filename, &appender_filename_len, \
|
|
&tracker_obj, &storage_obj);
|
|
}
|
|
if (result == FAILURE)
|
|
{
|
|
logError("file: "__FILE__", line: %d, " \
|
|
"zend_parse_parameters fail!", __LINE__);
|
|
pContext->err_no = EINVAL;
|
|
RETURN_BOOL(false);
|
|
}
|
|
}
|
|
|
|
if (tracker_obj == NULL)
|
|
{
|
|
pTrackerServer = tracker_get_connection_no_pool( \
|
|
pContext->pTrackerGroup);
|
|
if (pTrackerServer == NULL)
|
|
{
|
|
pContext->err_no = ENOENT;
|
|
RETURN_BOOL(false);
|
|
}
|
|
saved_tracker_sock = -1;
|
|
tracker_hash = NULL;
|
|
}
|
|
else
|
|
{
|
|
pTrackerServer = &tracker_server;
|
|
tracker_hash = Z_ARRVAL_P(tracker_obj);
|
|
if ((result=php_fdfs_get_server_from_hash(tracker_hash, \
|
|
pTrackerServer)) != 0)
|
|
{
|
|
pContext->err_no = result;
|
|
RETURN_BOOL(false);
|
|
}
|
|
saved_tracker_sock = pTrackerServer->sock;
|
|
}
|
|
|
|
if (storage_obj == NULL)
|
|
{
|
|
pStorageServer = NULL;
|
|
storage_hash = NULL;
|
|
saved_storage_sock = -1;
|
|
}
|
|
else
|
|
{
|
|
pStorageServer = &storage_server;
|
|
storage_hash = Z_ARRVAL_P(storage_obj);
|
|
if ((result=php_fdfs_get_server_from_hash(storage_hash, \
|
|
pStorageServer)) != 0)
|
|
{
|
|
pContext->err_no = result;
|
|
RETURN_BOOL(false);
|
|
}
|
|
|
|
saved_storage_sock = pStorageServer->sock;
|
|
}
|
|
|
|
if (upload_type == FDFS_UPLOAD_BY_FILE)
|
|
{
|
|
result = storage_append_by_filename(pTrackerServer, \
|
|
pStorageServer, local_filename, group_name, \
|
|
appender_filename);
|
|
}
|
|
else if (upload_type == FDFS_UPLOAD_BY_BUFF)
|
|
{
|
|
result = storage_append_by_filebuff(pTrackerServer, \
|
|
pStorageServer, local_filename, filename_len, \
|
|
group_name, appender_filename);
|
|
}
|
|
else
|
|
{
|
|
HashTable *callback_hash;
|
|
php_fdfs_upload_callback_t php_callback;
|
|
|
|
callback_hash = Z_ARRVAL_P(callback_obj);
|
|
result = php_fdfs_get_upload_callback_from_hash(callback_hash, \
|
|
&php_callback);
|
|
if (result != 0)
|
|
{
|
|
pContext->err_no = result;
|
|
RETURN_BOOL(false);
|
|
}
|
|
|
|
result = storage_append_by_callback(pTrackerServer, \
|
|
pStorageServer, php_fdfs_upload_callback, \
|
|
(void *)&php_callback, php_callback.file_size, \
|
|
group_name, appender_filename);
|
|
}
|
|
|
|
if (tracker_hash != NULL && pTrackerServer->sock != \
|
|
saved_tracker_sock)
|
|
{
|
|
CLEAR_HASH_SOCK_FIELD(tracker_hash)
|
|
}
|
|
if (pStorageServer != NULL && pStorageServer->sock != \
|
|
saved_storage_sock)
|
|
{
|
|
CLEAR_HASH_SOCK_FIELD(storage_hash)
|
|
}
|
|
|
|
pContext->err_no = result;
|
|
if (result == 0)
|
|
{
|
|
RETURN_BOOL(true);
|
|
}
|
|
else
|
|
{
|
|
RETURN_BOOL(false);
|
|
}
|
|
}
|
|
|
|
/*
|
|
boolean fastdfs_storage_modify_by_filename(string local_filename,
|
|
long file_offset, string group_name, appender_filename,
|
|
[array tracker_server, array storage_server])
|
|
return true for success, false for error
|
|
*/
|
|
static void php_fdfs_storage_modify_file_impl( \
|
|
INTERNAL_FUNCTION_PARAMETERS, FDFSPhpContext *pContext, \
|
|
const byte upload_type, const bool bFileId)
|
|
{
|
|
int result;
|
|
int argc;
|
|
zval *callback_obj;
|
|
char *local_filename;
|
|
char *appender_filename;
|
|
zval *tracker_obj;
|
|
zval *storage_obj;
|
|
char *group_name;
|
|
HashTable *tracker_hash;
|
|
HashTable *storage_hash;
|
|
ConnectionInfo tracker_server;
|
|
ConnectionInfo storage_server;
|
|
ConnectionInfo *pTrackerServer;
|
|
ConnectionInfo *pStorageServer;
|
|
char new_file_id[FDFS_GROUP_NAME_MAX_LEN + 128];
|
|
int filename_len;
|
|
int group_name_len;
|
|
int appender_filename_len;
|
|
int saved_tracker_sock;
|
|
int saved_storage_sock;
|
|
int min_param_count;
|
|
int max_param_count;
|
|
long file_offset = 0;
|
|
|
|
if (bFileId)
|
|
{
|
|
min_param_count = 3;
|
|
max_param_count = 5;
|
|
}
|
|
else
|
|
{
|
|
min_param_count = 4;
|
|
max_param_count = 6;
|
|
}
|
|
|
|
argc = ZEND_NUM_ARGS();
|
|
if (argc < min_param_count || argc > max_param_count)
|
|
{
|
|
logError("file: "__FILE__", line: %d, " \
|
|
"storage_modify_file parameters " \
|
|
"count: %d < %d or > %d", __LINE__, argc, \
|
|
min_param_count, max_param_count);
|
|
pContext->err_no = EINVAL;
|
|
RETURN_BOOL(false);
|
|
}
|
|
|
|
local_filename = NULL;
|
|
filename_len = 0;
|
|
callback_obj = NULL;
|
|
tracker_obj = NULL;
|
|
storage_obj = NULL;
|
|
if (bFileId)
|
|
{
|
|
char *pSeperator;
|
|
char *appender_file_id;
|
|
int appender_file_id_len;
|
|
|
|
if (upload_type == FDFS_UPLOAD_BY_CALLBACK)
|
|
{
|
|
result = zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, \
|
|
"als|aa", &callback_obj, &file_offset, \
|
|
&appender_file_id, &appender_file_id_len, \
|
|
&tracker_obj, &storage_obj);
|
|
}
|
|
else
|
|
{
|
|
result = zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, \
|
|
"sls|aa", &local_filename, &filename_len, \
|
|
&file_offset, &appender_file_id, &appender_file_id_len, \
|
|
&tracker_obj, &storage_obj);
|
|
}
|
|
if (result == FAILURE)
|
|
{
|
|
logError("file: "__FILE__", line: %d, " \
|
|
"zend_parse_parameters fail!", __LINE__);
|
|
pContext->err_no = EINVAL;
|
|
RETURN_BOOL(false);
|
|
}
|
|
|
|
snprintf(new_file_id, sizeof(new_file_id), "%s", appender_file_id);
|
|
pSeperator = strchr(new_file_id, FDFS_FILE_ID_SEPERATOR);
|
|
if (pSeperator == NULL)
|
|
{
|
|
logError("file: "__FILE__", line: %d, " \
|
|
"appender_file_id is invalid, " \
|
|
"appender_file_id=%s", \
|
|
__LINE__, appender_file_id);
|
|
pContext->err_no = EINVAL;
|
|
RETURN_BOOL(false);
|
|
}
|
|
|
|
*pSeperator = '\0';
|
|
group_name = new_file_id;
|
|
appender_filename = pSeperator + 1;
|
|
}
|
|
else
|
|
{
|
|
if (upload_type == FDFS_UPLOAD_BY_CALLBACK)
|
|
{
|
|
result = zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, \
|
|
"alss|aa", &callback_obj, &file_offset, \
|
|
&group_name, &group_name_len, \
|
|
&appender_filename, &appender_filename_len, \
|
|
&tracker_obj, &storage_obj);
|
|
}
|
|
else
|
|
{
|
|
result = zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, \
|
|
"slss|aa", &local_filename, &filename_len, \
|
|
&file_offset, &group_name, &group_name_len, \
|
|
&appender_filename, &appender_filename_len, \
|
|
&tracker_obj, &storage_obj);
|
|
}
|
|
if (result == FAILURE)
|
|
{
|
|
logError("file: "__FILE__", line: %d, " \
|
|
"zend_parse_parameters fail!", __LINE__);
|
|
pContext->err_no = EINVAL;
|
|
RETURN_BOOL(false);
|
|
}
|
|
}
|
|
|
|
if (tracker_obj == NULL)
|
|
{
|
|
pTrackerServer = tracker_get_connection_no_pool( \
|
|
pContext->pTrackerGroup);
|
|
if (pTrackerServer == NULL)
|
|
{
|
|
pContext->err_no = ENOENT;
|
|
RETURN_BOOL(false);
|
|
}
|
|
saved_tracker_sock = -1;
|
|
tracker_hash = NULL;
|
|
}
|
|
else
|
|
{
|
|
pTrackerServer = &tracker_server;
|
|
tracker_hash = Z_ARRVAL_P(tracker_obj);
|
|
if ((result=php_fdfs_get_server_from_hash(tracker_hash, \
|
|
pTrackerServer)) != 0)
|
|
{
|
|
pContext->err_no = result;
|
|
RETURN_BOOL(false);
|
|
}
|
|
saved_tracker_sock = pTrackerServer->sock;
|
|
}
|
|
|
|
if (storage_obj == NULL)
|
|
{
|
|
pStorageServer = NULL;
|
|
storage_hash = NULL;
|
|
saved_storage_sock = -1;
|
|
}
|
|
else
|
|
{
|
|
pStorageServer = &storage_server;
|
|
storage_hash = Z_ARRVAL_P(storage_obj);
|
|
if ((result=php_fdfs_get_server_from_hash(storage_hash, \
|
|
pStorageServer)) != 0)
|
|
{
|
|
pContext->err_no = result;
|
|
RETURN_BOOL(false);
|
|
}
|
|
|
|
saved_storage_sock = pStorageServer->sock;
|
|
}
|
|
|
|
if (upload_type == FDFS_UPLOAD_BY_FILE)
|
|
{
|
|
result = storage_modify_by_filename(pTrackerServer, \
|
|
pStorageServer, local_filename, file_offset, \
|
|
group_name, appender_filename);
|
|
}
|
|
else if (upload_type == FDFS_UPLOAD_BY_BUFF)
|
|
{
|
|
result = storage_modify_by_filebuff(pTrackerServer, \
|
|
pStorageServer, local_filename, \
|
|
file_offset, filename_len, \
|
|
group_name, appender_filename);
|
|
}
|
|
else
|
|
{
|
|
HashTable *callback_hash;
|
|
php_fdfs_upload_callback_t php_callback;
|
|
|
|
callback_hash = Z_ARRVAL_P(callback_obj);
|
|
result = php_fdfs_get_upload_callback_from_hash( \
|
|
callback_hash, &php_callback);
|
|
if (result != 0)
|
|
{
|
|
pContext->err_no = result;
|
|
RETURN_BOOL(false);
|
|
}
|
|
|
|
result = storage_modify_by_callback(pTrackerServer, \
|
|
pStorageServer, php_fdfs_upload_callback, \
|
|
(void *)&php_callback, file_offset, \
|
|
php_callback.file_size, group_name, \
|
|
appender_filename);
|
|
}
|
|
|
|
if (tracker_hash != NULL && pTrackerServer->sock != \
|
|
saved_tracker_sock)
|
|
{
|
|
CLEAR_HASH_SOCK_FIELD(tracker_hash)
|
|
}
|
|
if (pStorageServer != NULL && pStorageServer->sock != \
|
|
saved_storage_sock)
|
|
{
|
|
CLEAR_HASH_SOCK_FIELD(storage_hash)
|
|
}
|
|
|
|
pContext->err_no = result;
|
|
if (result == 0)
|
|
{
|
|
RETURN_BOOL(true);
|
|
}
|
|
else
|
|
{
|
|
RETURN_BOOL(false);
|
|
}
|
|
}
|
|
|
|
static void php_fdfs_storage_set_metadata_impl(INTERNAL_FUNCTION_PARAMETERS, \
|
|
FDFSPhpContext *pContext, const bool bFileId)
|
|
{
|
|
int result;
|
|
int argc;
|
|
char *group_name;
|
|
char *remote_filename;
|
|
char *op_type_str;
|
|
char op_type;
|
|
int group_nlen;
|
|
int filename_len;
|
|
int op_type_len;
|
|
zval *metadata_obj;
|
|
zval *tracker_obj;
|
|
zval *storage_obj;
|
|
HashTable *tracker_hash;
|
|
HashTable *storage_hash;
|
|
ConnectionInfo tracker_server;
|
|
ConnectionInfo storage_server;
|
|
ConnectionInfo *pTrackerServer;
|
|
ConnectionInfo *pStorageServer;
|
|
FDFSMetaData *meta_list;
|
|
int meta_count;
|
|
int min_param_count;
|
|
int max_param_count;
|
|
int saved_tracker_sock;
|
|
int saved_storage_sock;
|
|
char new_file_id[FDFS_GROUP_NAME_MAX_LEN + 128];
|
|
|
|
if (bFileId)
|
|
{
|
|
min_param_count = 1;
|
|
max_param_count = 5;
|
|
}
|
|
else
|
|
{
|
|
min_param_count = 2;
|
|
max_param_count = 6;
|
|
}
|
|
|
|
argc = ZEND_NUM_ARGS();
|
|
if (argc < min_param_count || argc > max_param_count)
|
|
{
|
|
logError("file: "__FILE__", line: %d, " \
|
|
"storage_set_metadata parameters " \
|
|
"count: %d < %d or > %d", __LINE__, argc, \
|
|
min_param_count, max_param_count);
|
|
pContext->err_no = EINVAL;
|
|
RETURN_BOOL(false);
|
|
}
|
|
|
|
tracker_obj = NULL;
|
|
storage_obj = NULL;
|
|
op_type_str = NULL;
|
|
op_type_len = 0;
|
|
if (bFileId)
|
|
{
|
|
char *pSeperator;
|
|
char *file_id;
|
|
int file_id_len;
|
|
|
|
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "sa|saa", \
|
|
&file_id, &file_id_len, &metadata_obj, &op_type_str, \
|
|
&op_type_len, &tracker_obj, &storage_obj) == FAILURE)
|
|
{
|
|
logError("file: "__FILE__", line: %d, " \
|
|
"zend_parse_parameters fail!", __LINE__);
|
|
pContext->err_no = EINVAL;
|
|
RETURN_BOOL(false);
|
|
}
|
|
|
|
snprintf(new_file_id, sizeof(new_file_id), "%s", file_id);
|
|
pSeperator = strchr(new_file_id, FDFS_FILE_ID_SEPERATOR);
|
|
if (pSeperator == NULL)
|
|
{
|
|
logError("file: "__FILE__", line: %d, " \
|
|
"file_id is invalid, file_id=%s", \
|
|
__LINE__, file_id);
|
|
pContext->err_no = EINVAL;
|
|
RETURN_BOOL(false);
|
|
}
|
|
|
|
*pSeperator = '\0';
|
|
group_name = new_file_id;
|
|
remote_filename = pSeperator + 1;
|
|
}
|
|
else if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ssa|saa", \
|
|
&group_name, &group_nlen, &remote_filename, &filename_len, \
|
|
&metadata_obj, &op_type_str, &op_type_len, &tracker_obj, \
|
|
&storage_obj) == FAILURE)
|
|
{
|
|
logError("file: "__FILE__", line: %d, " \
|
|
"zend_parse_parameters fail!", __LINE__);
|
|
pContext->err_no = EINVAL;
|
|
RETURN_BOOL(false);
|
|
}
|
|
|
|
if (tracker_obj == NULL)
|
|
{
|
|
pTrackerServer = tracker_get_connection_no_pool( \
|
|
pContext->pTrackerGroup);
|
|
if (pTrackerServer == NULL)
|
|
{
|
|
pContext->err_no = ENOENT;
|
|
RETURN_BOOL(false);
|
|
}
|
|
saved_tracker_sock = -1;
|
|
tracker_hash = NULL;
|
|
}
|
|
else
|
|
{
|
|
pTrackerServer = &tracker_server;
|
|
tracker_hash = Z_ARRVAL_P(tracker_obj);
|
|
if ((result=php_fdfs_get_server_from_hash(tracker_hash, \
|
|
pTrackerServer)) != 0)
|
|
{
|
|
pContext->err_no = result;
|
|
RETURN_BOOL(false);
|
|
}
|
|
saved_tracker_sock = pTrackerServer->sock;
|
|
}
|
|
|
|
if (storage_obj == NULL)
|
|
{
|
|
pStorageServer = NULL;
|
|
storage_hash = NULL;
|
|
saved_storage_sock = -1;
|
|
}
|
|
else
|
|
{
|
|
pStorageServer = &storage_server;
|
|
storage_hash = Z_ARRVAL_P(storage_obj);
|
|
if ((result=php_fdfs_get_server_from_hash(storage_hash, \
|
|
pStorageServer)) != 0)
|
|
{
|
|
pContext->err_no = result;
|
|
RETURN_BOOL(false);
|
|
}
|
|
saved_storage_sock = pStorageServer->sock;
|
|
}
|
|
|
|
if (metadata_obj == NULL)
|
|
{
|
|
meta_list = NULL;
|
|
meta_count = 0;
|
|
}
|
|
else
|
|
{
|
|
result = fastdfs_convert_metadata_to_array(metadata_obj, \
|
|
&meta_list, &meta_count);
|
|
if (result != 0)
|
|
{
|
|
pContext->err_no = result;
|
|
RETURN_BOOL(false);
|
|
}
|
|
}
|
|
|
|
if (op_type_str == NULL)
|
|
{
|
|
op_type = STORAGE_SET_METADATA_FLAG_MERGE;
|
|
}
|
|
else if (TO_UPPERCASE(*op_type_str) == STORAGE_SET_METADATA_FLAG_MERGE)
|
|
{
|
|
op_type = STORAGE_SET_METADATA_FLAG_MERGE;
|
|
}
|
|
else if (TO_UPPERCASE(*op_type_str) == STORAGE_SET_METADATA_FLAG_OVERWRITE)
|
|
{
|
|
op_type = STORAGE_SET_METADATA_FLAG_OVERWRITE;
|
|
}
|
|
else
|
|
{
|
|
logError("file: "__FILE__", line: %d, " \
|
|
"invalid op_type: %s!", __LINE__, op_type_str);
|
|
pContext->err_no = EINVAL;
|
|
RETURN_BOOL(false);
|
|
}
|
|
|
|
result = storage_set_metadata(pTrackerServer, pStorageServer, \
|
|
group_name, remote_filename, \
|
|
meta_list, meta_count, op_type);
|
|
if (tracker_hash != NULL && pTrackerServer->sock != \
|
|
saved_tracker_sock)
|
|
{
|
|
CLEAR_HASH_SOCK_FIELD(tracker_hash)
|
|
}
|
|
if (pStorageServer != NULL && pStorageServer->sock != \
|
|
saved_storage_sock)
|
|
{
|
|
CLEAR_HASH_SOCK_FIELD(storage_hash)
|
|
}
|
|
|
|
pContext->err_no = result;
|
|
if (meta_list != NULL)
|
|
{
|
|
free(meta_list);
|
|
}
|
|
if (result != 0)
|
|
{
|
|
if (tracker_obj == NULL)
|
|
{
|
|
conn_pool_disconnect_server(pTrackerServer);
|
|
}
|
|
RETURN_BOOL(false);
|
|
}
|
|
else
|
|
{
|
|
RETURN_BOOL(true);
|
|
}
|
|
}
|
|
|
|
static void php_fdfs_http_gen_token_impl(INTERNAL_FUNCTION_PARAMETERS, \
|
|
FDFSPhpContext *pContext)
|
|
{
|
|
int result;
|
|
int argc;
|
|
char *file_id;
|
|
int file_id_len;
|
|
long ts;
|
|
char token[64];
|
|
|
|
argc = ZEND_NUM_ARGS();
|
|
if (argc != 2)
|
|
{
|
|
logError("file: "__FILE__", line: %d, " \
|
|
"storage_upload_file parameters " \
|
|
"count: %d != 2", __LINE__, argc);
|
|
pContext->err_no = EINVAL;
|
|
RETURN_BOOL(false);
|
|
}
|
|
|
|
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "sl", \
|
|
&file_id, &file_id_len, &ts) == FAILURE)
|
|
{
|
|
logError("file: "__FILE__", line: %d, " \
|
|
"zend_parse_parameters fail!", __LINE__);
|
|
pContext->err_no = EINVAL;
|
|
RETURN_BOOL(false);
|
|
}
|
|
|
|
result = fdfs_http_gen_token(&g_anti_steal_secret_key, file_id, \
|
|
(int)ts, token);
|
|
pContext->err_no = result;
|
|
if (result != 0)
|
|
{
|
|
RETURN_BOOL(false);
|
|
}
|
|
|
|
RETURN_STRINGL(token, strlen(token), 1);
|
|
}
|
|
|
|
static void php_fdfs_send_data_impl(INTERNAL_FUNCTION_PARAMETERS, \
|
|
FDFSPhpContext *pContext)
|
|
{
|
|
int argc;
|
|
long sock;
|
|
char *buff;
|
|
int buff_len;
|
|
|
|
argc = ZEND_NUM_ARGS();
|
|
if (argc != 2)
|
|
{
|
|
logError("file: "__FILE__", line: %d, " \
|
|
"send_data parameters " \
|
|
"count: %d != 2", __LINE__, argc);
|
|
pContext->err_no = EINVAL;
|
|
RETURN_BOOL(false);
|
|
}
|
|
|
|
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ls", \
|
|
&sock, &buff, &buff_len) == FAILURE)
|
|
{
|
|
logError("file: "__FILE__", line: %d, " \
|
|
"zend_parse_parameters fail!", __LINE__);
|
|
pContext->err_no = EINVAL;
|
|
RETURN_BOOL(false);
|
|
}
|
|
|
|
if ((pContext->err_no=tcpsenddata_nb(sock, buff, \
|
|
buff_len, g_fdfs_network_timeout)) != 0)
|
|
{
|
|
RETURN_BOOL(false);
|
|
}
|
|
|
|
RETURN_BOOL(true);
|
|
}
|
|
|
|
static void php_fdfs_get_file_info_impl(INTERNAL_FUNCTION_PARAMETERS, \
|
|
FDFSPhpContext *pContext, const bool bFileId)
|
|
{
|
|
int result;
|
|
int argc;
|
|
char *group_name;
|
|
char *remote_filename;
|
|
int group_nlen;
|
|
int filename_len;
|
|
int param_count;
|
|
FDFSFileInfo file_info;
|
|
char new_file_id[FDFS_GROUP_NAME_MAX_LEN + 128];
|
|
|
|
if (bFileId)
|
|
{
|
|
param_count = 1;
|
|
}
|
|
else
|
|
{
|
|
param_count = 2;
|
|
}
|
|
|
|
argc = ZEND_NUM_ARGS();
|
|
if (argc != param_count)
|
|
{
|
|
logError("file: "__FILE__", line: %d, " \
|
|
"storage_upload_file parameters " \
|
|
"count: %d != %d", __LINE__, argc, param_count);
|
|
pContext->err_no = EINVAL;
|
|
RETURN_BOOL(false);
|
|
}
|
|
|
|
if (bFileId)
|
|
{
|
|
char *pSeperator;
|
|
char *file_id;
|
|
int file_id_len;
|
|
|
|
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", \
|
|
&file_id, &file_id_len) == FAILURE)
|
|
{
|
|
logError("file: "__FILE__", line: %d, " \
|
|
"zend_parse_parameters fail!", __LINE__);
|
|
pContext->err_no = EINVAL;
|
|
RETURN_BOOL(false);
|
|
}
|
|
|
|
snprintf(new_file_id, sizeof(new_file_id), "%s", file_id);
|
|
pSeperator = strchr(new_file_id, FDFS_FILE_ID_SEPERATOR);
|
|
if (pSeperator == NULL)
|
|
{
|
|
logError("file: "__FILE__", line: %d, " \
|
|
"file_id is invalid, file_id=%s", \
|
|
__LINE__, file_id);
|
|
pContext->err_no = EINVAL;
|
|
RETURN_BOOL(false);
|
|
}
|
|
|
|
*pSeperator = '\0';
|
|
group_name = new_file_id;
|
|
remote_filename = pSeperator + 1;
|
|
}
|
|
else
|
|
{
|
|
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ss", \
|
|
&group_name, &group_nlen, &remote_filename, \
|
|
&filename_len) == FAILURE)
|
|
{
|
|
logError("file: "__FILE__", line: %d, " \
|
|
"zend_parse_parameters fail!", __LINE__);
|
|
pContext->err_no = EINVAL;
|
|
RETURN_BOOL(false);
|
|
}
|
|
}
|
|
|
|
result = fdfs_get_file_info_ex(group_name, remote_filename, true, &file_info);
|
|
pContext->err_no = result;
|
|
if (result != 0)
|
|
{
|
|
RETURN_BOOL(false);
|
|
}
|
|
|
|
array_init(return_value);
|
|
add_assoc_long_ex(return_value, "source_id", \
|
|
sizeof("source_id"), file_info.source_id);
|
|
add_assoc_long_ex(return_value, "create_timestamp", \
|
|
sizeof("create_timestamp"), file_info.create_timestamp);
|
|
add_assoc_long_ex(return_value, "file_size", \
|
|
sizeof("file_size"), (long)file_info.file_size);
|
|
add_assoc_stringl_ex(return_value, "source_ip_addr", \
|
|
sizeof("source_ip_addr"), file_info.source_ip_addr, \
|
|
strlen(file_info.source_ip_addr), 1);
|
|
add_assoc_long_ex(return_value, "crc32", \
|
|
sizeof("crc32"), file_info.crc32);
|
|
}
|
|
|
|
/*
|
|
string fastdfs_gen_slave_filename(string master_filename, string prefix_name
|
|
[, string file_ext_name])
|
|
return slave filename string for success, false for error
|
|
*/
|
|
static void php_fdfs_gen_slave_filename_impl(INTERNAL_FUNCTION_PARAMETERS, \
|
|
FDFSPhpContext *pContext)
|
|
{
|
|
int result;
|
|
int argc;
|
|
char *master_filename;
|
|
int master_filename_len;
|
|
char *prefix_name;
|
|
int prefix_name_len;
|
|
int filename_len;
|
|
zval *ext_name_obj;
|
|
char *file_ext_name;
|
|
int file_ext_name_len;
|
|
char filename[128];
|
|
|
|
argc = ZEND_NUM_ARGS();
|
|
if (argc != 2 && argc != 3)
|
|
{
|
|
logError("file: "__FILE__", line: %d, " \
|
|
"storage_upload_file parameters " \
|
|
"count: %d != 2 or 3", __LINE__, argc);
|
|
pContext->err_no = EINVAL;
|
|
RETURN_BOOL(false);
|
|
}
|
|
|
|
ext_name_obj = NULL;
|
|
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ss|z", \
|
|
&master_filename, &master_filename_len, &prefix_name, \
|
|
&prefix_name_len, &ext_name_obj) == FAILURE)
|
|
{
|
|
logError("file: "__FILE__", line: %d, " \
|
|
"zend_parse_parameters fail!", __LINE__);
|
|
pContext->err_no = EINVAL;
|
|
RETURN_BOOL(false);
|
|
}
|
|
|
|
if (ext_name_obj == NULL)
|
|
{
|
|
file_ext_name = NULL;
|
|
file_ext_name_len = 0;
|
|
}
|
|
else
|
|
{
|
|
if (ext_name_obj->type == IS_NULL)
|
|
{
|
|
file_ext_name = NULL;
|
|
file_ext_name_len = 0;
|
|
}
|
|
else if (ext_name_obj->type == IS_STRING)
|
|
{
|
|
file_ext_name = ext_name_obj->value.str.val;
|
|
file_ext_name_len = ext_name_obj->value.str.len;
|
|
}
|
|
else
|
|
{
|
|
logError("file: "__FILE__", line: %d, " \
|
|
"file_ext_name is not a string, type=%d!", \
|
|
__LINE__, ext_name_obj->type);
|
|
pContext->err_no = EINVAL;
|
|
RETURN_BOOL(false);
|
|
}
|
|
}
|
|
|
|
if (master_filename_len + prefix_name_len + file_ext_name_len + 1 \
|
|
>= sizeof(filename))
|
|
{
|
|
logError("file: "__FILE__", line: %d, " \
|
|
"filename length is too long!", __LINE__);
|
|
pContext->err_no = EINVAL;
|
|
RETURN_BOOL(false);
|
|
}
|
|
|
|
result = fdfs_gen_slave_filename(master_filename, \
|
|
prefix_name, file_ext_name, filename, &filename_len);
|
|
pContext->err_no = result;
|
|
if (result != 0)
|
|
{
|
|
RETURN_BOOL(false);
|
|
}
|
|
|
|
RETURN_STRINGL(filename, filename_len, 1);
|
|
}
|
|
|
|
/*
|
|
array fastdfs_tracker_get_connection()
|
|
return array for success, false for error
|
|
*/
|
|
ZEND_FUNCTION(fastdfs_tracker_get_connection)
|
|
{
|
|
php_fdfs_tracker_get_connection_impl(INTERNAL_FUNCTION_PARAM_PASSTHRU, \
|
|
&php_context);
|
|
}
|
|
|
|
/*
|
|
boolean fastdfs_tracker_make_all_connections()
|
|
return true for success, false for error
|
|
*/
|
|
ZEND_FUNCTION(fastdfs_tracker_make_all_connections)
|
|
{
|
|
php_fdfs_tracker_make_all_connections_impl( \
|
|
INTERNAL_FUNCTION_PARAM_PASSTHRU, &php_context);
|
|
}
|
|
|
|
/*
|
|
boolean fastdfs_tracker_close_all_connections()
|
|
return true for success, false for error
|
|
*/
|
|
ZEND_FUNCTION(fastdfs_tracker_close_all_connections)
|
|
{
|
|
php_fdfs_tracker_close_all_connections_impl( \
|
|
INTERNAL_FUNCTION_PARAM_PASSTHRU, &php_context);
|
|
}
|
|
|
|
/*
|
|
array fastdfs_connect_server(string ip_addr, int port)
|
|
return array for success, false for error
|
|
*/
|
|
ZEND_FUNCTION(fastdfs_connect_server)
|
|
{
|
|
php_fdfs_connect_server_impl(INTERNAL_FUNCTION_PARAM_PASSTHRU, \
|
|
&php_context);
|
|
}
|
|
|
|
/*
|
|
boolean fastdfs_disconnect_server(array serverInfo)
|
|
return true for success, false for error
|
|
*/
|
|
ZEND_FUNCTION(fastdfs_disconnect_server)
|
|
{
|
|
php_fdfs_disconnect_server_impl(INTERNAL_FUNCTION_PARAM_PASSTHRU, \
|
|
&php_context);
|
|
}
|
|
|
|
/*
|
|
boolean fastdfs_active_test(array serverInfo)
|
|
return true for success, false for error
|
|
*/
|
|
ZEND_FUNCTION(fastdfs_active_test)
|
|
{
|
|
php_fastdfs_active_test_impl(INTERNAL_FUNCTION_PARAM_PASSTHRU, \
|
|
&php_context);
|
|
}
|
|
|
|
/*
|
|
long fastdfs_get_last_error_no()
|
|
return last error no
|
|
*/
|
|
ZEND_FUNCTION(fastdfs_get_last_error_no)
|
|
{
|
|
RETURN_LONG(php_context.err_no);
|
|
}
|
|
|
|
/*
|
|
string fastdfs_get_last_error_info()
|
|
return last error info
|
|
*/
|
|
ZEND_FUNCTION(fastdfs_get_last_error_info)
|
|
{
|
|
char *error_info;
|
|
|
|
error_info = STRERROR(php_context.err_no);
|
|
RETURN_STRINGL(error_info, strlen(error_info), 1);
|
|
}
|
|
|
|
/*
|
|
string fastdfs_client_version()
|
|
return client library version
|
|
*/
|
|
ZEND_FUNCTION(fastdfs_client_version)
|
|
{
|
|
char szVersion[16];
|
|
int len;
|
|
|
|
len = sprintf(szVersion, "%d.%02d", \
|
|
g_fdfs_version.major, g_fdfs_version.minor);
|
|
|
|
RETURN_STRINGL(szVersion, len, 1);
|
|
}
|
|
|
|
/*
|
|
array fastdfs_tracker_list_groups([string group_name, array tracker_server])
|
|
return array for success, false for error
|
|
*/
|
|
ZEND_FUNCTION(fastdfs_tracker_list_groups)
|
|
{
|
|
php_fdfs_tracker_list_groups_impl(INTERNAL_FUNCTION_PARAM_PASSTHRU, \
|
|
&php_context);
|
|
}
|
|
|
|
/*
|
|
array fastdfs_tracker_query_storage_store([string group_name,
|
|
array tracker_server])
|
|
return array for success, false for error
|
|
*/
|
|
ZEND_FUNCTION(fastdfs_tracker_query_storage_store)
|
|
{
|
|
php_fdfs_tracker_query_storage_store_impl( \
|
|
INTERNAL_FUNCTION_PARAM_PASSTHRU, &php_context);
|
|
}
|
|
|
|
/*
|
|
array fastdfs_tracker_query_storage_store_list([string group_name,
|
|
array tracker_server])
|
|
return array for success, false for error
|
|
*/
|
|
ZEND_FUNCTION(fastdfs_tracker_query_storage_store_list)
|
|
{
|
|
php_fdfs_tracker_query_storage_store_list_impl( \
|
|
INTERNAL_FUNCTION_PARAM_PASSTHRU, &php_context);
|
|
}
|
|
|
|
/*
|
|
array fastdfs_tracker_query_storage_update(string group_name,
|
|
string remote_filename [, array tracker_server])
|
|
return array for success, false for error
|
|
*/
|
|
ZEND_FUNCTION(fastdfs_tracker_query_storage_update)
|
|
{
|
|
php_fdfs_tracker_do_query_storage_impl( \
|
|
INTERNAL_FUNCTION_PARAM_PASSTHRU, &php_context, \
|
|
TRACKER_PROTO_CMD_SERVICE_QUERY_UPDATE, false);
|
|
}
|
|
|
|
/*
|
|
array fastdfs_tracker_query_storage_fetch(string group_name,
|
|
string remote_filename [, array tracker_server])
|
|
return array for success, false for error
|
|
*/
|
|
ZEND_FUNCTION(fastdfs_tracker_query_storage_fetch)
|
|
{
|
|
php_fdfs_tracker_do_query_storage_impl( \
|
|
INTERNAL_FUNCTION_PARAM_PASSTHRU, &php_context, \
|
|
TRACKER_PROTO_CMD_SERVICE_QUERY_FETCH_ONE, false);
|
|
}
|
|
|
|
/*
|
|
array fastdfs_tracker_query_storage_list(string group_name,
|
|
string remote_filename [, array tracker_server])
|
|
return array for success, false for error
|
|
*/
|
|
ZEND_FUNCTION(fastdfs_tracker_query_storage_list)
|
|
{
|
|
php_fdfs_tracker_query_storage_list_impl( \
|
|
INTERNAL_FUNCTION_PARAM_PASSTHRU, \
|
|
&php_context, false);
|
|
}
|
|
|
|
/*
|
|
array fastdfs_tracker_query_storage_update1(string file_id,
|
|
[, array tracker_server])
|
|
return array for success, false for error
|
|
*/
|
|
ZEND_FUNCTION(fastdfs_tracker_query_storage_update1)
|
|
{
|
|
php_fdfs_tracker_do_query_storage_impl( \
|
|
INTERNAL_FUNCTION_PARAM_PASSTHRU, &php_context, \
|
|
TRACKER_PROTO_CMD_SERVICE_QUERY_UPDATE, true);
|
|
}
|
|
|
|
/*
|
|
array fastdfs_tracker_query_storage_fetch1(string file_id
|
|
[, array tracker_server])
|
|
return array for success, false for error
|
|
*/
|
|
ZEND_FUNCTION(fastdfs_tracker_query_storage_fetch1)
|
|
{
|
|
php_fdfs_tracker_do_query_storage_impl( \
|
|
INTERNAL_FUNCTION_PARAM_PASSTHRU, &php_context, \
|
|
TRACKER_PROTO_CMD_SERVICE_QUERY_FETCH_ONE, true);
|
|
}
|
|
|
|
/*
|
|
array fastdfs_tracker_query_storage_list1(string file_id
|
|
[, array tracker_server])
|
|
return array for success, false for error
|
|
*/
|
|
ZEND_FUNCTION(fastdfs_tracker_query_storage_list1)
|
|
{
|
|
php_fdfs_tracker_query_storage_list_impl( \
|
|
INTERNAL_FUNCTION_PARAM_PASSTHRU, \
|
|
&php_context, true);
|
|
}
|
|
|
|
/*
|
|
boolean fastdfs_tracker_delete_storage(string group_name, string storage_ip)
|
|
return true for success, false for error
|
|
*/
|
|
ZEND_FUNCTION(fastdfs_tracker_delete_storage)
|
|
{
|
|
php_fdfs_tracker_delete_storage_impl( \
|
|
INTERNAL_FUNCTION_PARAM_PASSTHRU, \
|
|
&php_context);
|
|
}
|
|
|
|
/*
|
|
array fastdfs_storage_upload_by_filename(string local_filename,
|
|
[string file_ext_name, string meta_list, string group_name,
|
|
array tracker_server, array storage_server])
|
|
return array for success, false for error
|
|
*/
|
|
ZEND_FUNCTION(fastdfs_storage_upload_by_filename)
|
|
{
|
|
php_fdfs_storage_upload_file_impl(INTERNAL_FUNCTION_PARAM_PASSTHRU, \
|
|
&php_context, STORAGE_PROTO_CMD_UPLOAD_FILE, \
|
|
FDFS_UPLOAD_BY_FILE, false);
|
|
}
|
|
|
|
/*
|
|
string fastdfs_storage_upload_by_filename1(string local_filename,
|
|
[string file_ext_name, string meta_list, string group_name,
|
|
array tracker_server, array storage_server])
|
|
return file_id for success, false for error
|
|
*/
|
|
ZEND_FUNCTION(fastdfs_storage_upload_by_filename1)
|
|
{
|
|
php_fdfs_storage_upload_file_impl(INTERNAL_FUNCTION_PARAM_PASSTHRU, \
|
|
&php_context, STORAGE_PROTO_CMD_UPLOAD_FILE, \
|
|
FDFS_UPLOAD_BY_FILE, true);
|
|
}
|
|
|
|
/*
|
|
array fastdfs_storage_upload_by_filebuff(string file_buff,
|
|
[string file_ext_name, string meta_list, string group_name,
|
|
array tracker_server, array storage_server])
|
|
return array for success, false for error
|
|
*/
|
|
ZEND_FUNCTION(fastdfs_storage_upload_by_filebuff)
|
|
{
|
|
php_fdfs_storage_upload_file_impl(INTERNAL_FUNCTION_PARAM_PASSTHRU, \
|
|
&php_context, STORAGE_PROTO_CMD_UPLOAD_FILE, \
|
|
FDFS_UPLOAD_BY_BUFF, false);
|
|
}
|
|
|
|
/*
|
|
string fastdfs_storage_upload_by_filebuff1(string file_buff,
|
|
[string file_ext_name, string meta_list, string group_name,
|
|
array tracker_server, array storage_server])
|
|
return file_id for success, false for error
|
|
*/
|
|
ZEND_FUNCTION(fastdfs_storage_upload_by_filebuff1)
|
|
{
|
|
php_fdfs_storage_upload_file_impl(INTERNAL_FUNCTION_PARAM_PASSTHRU, \
|
|
&php_context, STORAGE_PROTO_CMD_UPLOAD_FILE, \
|
|
FDFS_UPLOAD_BY_BUFF, true);
|
|
}
|
|
|
|
/*
|
|
array fastdfs_storage_upload_by_callback(array callback_array,
|
|
[string file_ext_name, string meta_list, string group_name,
|
|
array tracker_server, array storage_server])
|
|
return array for success, false for error
|
|
*/
|
|
ZEND_FUNCTION(fastdfs_storage_upload_by_callback)
|
|
{
|
|
php_fdfs_storage_upload_file_impl(INTERNAL_FUNCTION_PARAM_PASSTHRU, \
|
|
&php_context, STORAGE_PROTO_CMD_UPLOAD_FILE, \
|
|
FDFS_UPLOAD_BY_CALLBACK, false);
|
|
}
|
|
|
|
/*
|
|
string fastdfs_storage_upload_by_callback1(array callback_array,
|
|
[string file_ext_name, string meta_list, string group_name,
|
|
array tracker_server, array storage_server])
|
|
return file_id for success, false for error
|
|
*/
|
|
ZEND_FUNCTION(fastdfs_storage_upload_by_callback1)
|
|
{
|
|
php_fdfs_storage_upload_file_impl(INTERNAL_FUNCTION_PARAM_PASSTHRU, \
|
|
&php_context, STORAGE_PROTO_CMD_UPLOAD_FILE, \
|
|
FDFS_UPLOAD_BY_CALLBACK, true);
|
|
}
|
|
|
|
/*
|
|
boolean fastdfs_storage_append_by_filename(string local_filename,
|
|
string group_name, appender_filename
|
|
[, array tracker_server, array storage_server])
|
|
return true for success, false for error
|
|
*/
|
|
ZEND_FUNCTION(fastdfs_storage_append_by_filename)
|
|
{
|
|
php_fdfs_storage_append_file_impl(INTERNAL_FUNCTION_PARAM_PASSTHRU, \
|
|
&php_context, FDFS_UPLOAD_BY_FILE, false);
|
|
}
|
|
|
|
/*
|
|
boolean fastdfs_storage_append_by_filename1(string local_filename,
|
|
string appender_file_id
|
|
[, array tracker_server, array storage_server])
|
|
return true for success, false for error
|
|
*/
|
|
ZEND_FUNCTION(fastdfs_storage_append_by_filename1)
|
|
{
|
|
php_fdfs_storage_append_file_impl(INTERNAL_FUNCTION_PARAM_PASSTHRU, \
|
|
&php_context, FDFS_UPLOAD_BY_FILE, true);
|
|
}
|
|
|
|
/*
|
|
boolean fastdfs_storage_append_by_filebuff(string file_buff,
|
|
string group_name, string appender_filename
|
|
[, array tracker_server, array storage_server])
|
|
return true for success, false for error
|
|
*/
|
|
ZEND_FUNCTION(fastdfs_storage_append_by_filebuff)
|
|
{
|
|
php_fdfs_storage_append_file_impl(INTERNAL_FUNCTION_PARAM_PASSTHRU, \
|
|
&php_context, FDFS_UPLOAD_BY_BUFF, false);
|
|
}
|
|
|
|
/*
|
|
boolean fastdfs_storage_append_by_filebuff1(string file_buff,
|
|
string appender_file_id
|
|
[, array tracker_server, array storage_server])
|
|
return true for success, false for error
|
|
*/
|
|
ZEND_FUNCTION(fastdfs_storage_append_by_filebuff1)
|
|
{
|
|
php_fdfs_storage_append_file_impl(INTERNAL_FUNCTION_PARAM_PASSTHRU, \
|
|
&php_context, FDFS_UPLOAD_BY_BUFF, true);
|
|
}
|
|
|
|
/*
|
|
boolean fastdfs_storage_append_by_callback(array callback_array,
|
|
string group_name, string appender_filename
|
|
[, array tracker_server, array storage_server])
|
|
return true for success, false for error
|
|
*/
|
|
ZEND_FUNCTION(fastdfs_storage_append_by_callback)
|
|
{
|
|
php_fdfs_storage_append_file_impl(INTERNAL_FUNCTION_PARAM_PASSTHRU, \
|
|
&php_context, FDFS_UPLOAD_BY_CALLBACK, false);
|
|
}
|
|
|
|
/*
|
|
boolean fastdfs_storage_append_by_callback1(array callback_array,
|
|
string group_name, string appender_filename
|
|
[, array tracker_server, array storage_server])
|
|
return true for success, false for error
|
|
*/
|
|
ZEND_FUNCTION(fastdfs_storage_append_by_callback1)
|
|
{
|
|
php_fdfs_storage_append_file_impl(INTERNAL_FUNCTION_PARAM_PASSTHRU, \
|
|
&php_context, FDFS_UPLOAD_BY_CALLBACK, true);
|
|
}
|
|
|
|
/*
|
|
boolean fastdfs_storage_modify_by_filename(string local_filename,
|
|
long file_offset, string group_name, appender_filename
|
|
[, array tracker_server, array storage_server])
|
|
return true for success, false for error
|
|
*/
|
|
ZEND_FUNCTION(fastdfs_storage_modify_by_filename)
|
|
{
|
|
php_fdfs_storage_modify_file_impl(INTERNAL_FUNCTION_PARAM_PASSTHRU, \
|
|
&php_context, FDFS_UPLOAD_BY_FILE, false);
|
|
}
|
|
|
|
/*
|
|
boolean fastdfs_storage_modify_by_filename1(string local_filename,
|
|
long file_offset, string appender_file_id
|
|
[, array tracker_server, array storage_server])
|
|
return true for success, false for error
|
|
*/
|
|
ZEND_FUNCTION(fastdfs_storage_modify_by_filename1)
|
|
{
|
|
php_fdfs_storage_modify_file_impl(INTERNAL_FUNCTION_PARAM_PASSTHRU, \
|
|
&php_context, FDFS_UPLOAD_BY_FILE, true);
|
|
}
|
|
|
|
/*
|
|
boolean fastdfs_storage_modify_by_filebuff(string file_buff,
|
|
long file_offset, string group_name, string appender_filename
|
|
[, array tracker_server, array storage_server])
|
|
return true for success, false for error
|
|
*/
|
|
ZEND_FUNCTION(fastdfs_storage_modify_by_filebuff)
|
|
{
|
|
php_fdfs_storage_modify_file_impl(INTERNAL_FUNCTION_PARAM_PASSTHRU, \
|
|
&php_context, FDFS_UPLOAD_BY_BUFF, false);
|
|
}
|
|
|
|
/*
|
|
boolean fastdfs_storage_modify_by_filebuff1(string file_buff,
|
|
long file_offset, string appender_file_id
|
|
[, array tracker_server, array storage_server])
|
|
return true for success, false for error
|
|
*/
|
|
ZEND_FUNCTION(fastdfs_storage_modify_by_filebuff1)
|
|
{
|
|
php_fdfs_storage_modify_file_impl(INTERNAL_FUNCTION_PARAM_PASSTHRU, \
|
|
&php_context, FDFS_UPLOAD_BY_BUFF, true);
|
|
}
|
|
|
|
/*
|
|
boolean fastdfs_storage_modify_by_callback(array callback_array,
|
|
long file_offset, string group_name, string appender_filename
|
|
[, array tracker_server, array storage_server])
|
|
return true for success, false for error
|
|
*/
|
|
ZEND_FUNCTION(fastdfs_storage_modify_by_callback)
|
|
{
|
|
php_fdfs_storage_modify_file_impl(INTERNAL_FUNCTION_PARAM_PASSTHRU, \
|
|
&php_context, FDFS_UPLOAD_BY_CALLBACK, false);
|
|
}
|
|
|
|
/*
|
|
boolean fastdfs_storage_modify_by_callback1(array callback_array,
|
|
long file_offset, string group_name, string appender_filename
|
|
[, array tracker_server, array storage_server])
|
|
return true for success, false for error
|
|
*/
|
|
ZEND_FUNCTION(fastdfs_storage_modify_by_callback1)
|
|
{
|
|
php_fdfs_storage_modify_file_impl(INTERNAL_FUNCTION_PARAM_PASSTHRU, \
|
|
&php_context, FDFS_UPLOAD_BY_CALLBACK, true);
|
|
}
|
|
|
|
/*
|
|
array fastdfs_storage_upload_appender_by_filename(string local_filename,
|
|
[string file_ext_name, string meta_list, string group_name,
|
|
array tracker_server, array storage_server])
|
|
return array for success, false for error
|
|
*/
|
|
ZEND_FUNCTION(fastdfs_storage_upload_appender_by_filename)
|
|
{
|
|
php_fdfs_storage_upload_file_impl(INTERNAL_FUNCTION_PARAM_PASSTHRU, \
|
|
&php_context, STORAGE_PROTO_CMD_UPLOAD_APPENDER_FILE, \
|
|
FDFS_UPLOAD_BY_FILE, false);
|
|
}
|
|
|
|
/*
|
|
string fastdfs_storage_upload_appender_by_filename1(string local_filename,
|
|
[string file_ext_name, string meta_list, string group_name,
|
|
array tracker_server, array storage_server])
|
|
return file_id for success, false for error
|
|
*/
|
|
ZEND_FUNCTION(fastdfs_storage_upload_appender_by_filename1)
|
|
{
|
|
php_fdfs_storage_upload_file_impl(INTERNAL_FUNCTION_PARAM_PASSTHRU, \
|
|
&php_context, STORAGE_PROTO_CMD_UPLOAD_APPENDER_FILE, \
|
|
FDFS_UPLOAD_BY_FILE, true);
|
|
}
|
|
|
|
/*
|
|
array fastdfs_storage_upload_appender_by_filebuff(string file_buff,
|
|
[string file_ext_name, string meta_list, string group_name,
|
|
array tracker_server, array storage_server])
|
|
return array for success, false for error
|
|
*/
|
|
ZEND_FUNCTION(fastdfs_storage_upload_appender_by_filebuff)
|
|
{
|
|
php_fdfs_storage_upload_file_impl(INTERNAL_FUNCTION_PARAM_PASSTHRU, \
|
|
&php_context, STORAGE_PROTO_CMD_UPLOAD_APPENDER_FILE, \
|
|
FDFS_UPLOAD_BY_BUFF, false);
|
|
}
|
|
|
|
/*
|
|
string fastdfs_storage_upload_appender_by_filebuff1(string file_buff,
|
|
[string file_ext_name, string meta_list, string group_name,
|
|
array tracker_server, array storage_server])
|
|
return file_id for success, false for error
|
|
*/
|
|
ZEND_FUNCTION(fastdfs_storage_upload_appender_by_filebuff1)
|
|
{
|
|
php_fdfs_storage_upload_file_impl(INTERNAL_FUNCTION_PARAM_PASSTHRU, \
|
|
&php_context, STORAGE_PROTO_CMD_UPLOAD_APPENDER_FILE, \
|
|
FDFS_UPLOAD_BY_BUFF, true);
|
|
}
|
|
|
|
/*
|
|
array fastdfs_storage_upload_appender_by_callback(array callback_array,
|
|
[string file_ext_name, string meta_list, string group_name,
|
|
array tracker_server, array storage_server])
|
|
return array for success, false for error
|
|
*/
|
|
ZEND_FUNCTION(fastdfs_storage_upload_appender_by_callback)
|
|
{
|
|
php_fdfs_storage_upload_file_impl(INTERNAL_FUNCTION_PARAM_PASSTHRU, \
|
|
&php_context, STORAGE_PROTO_CMD_UPLOAD_APPENDER_FILE, \
|
|
FDFS_UPLOAD_BY_CALLBACK, false);
|
|
}
|
|
|
|
/*
|
|
string fastdfs_storage_upload_appender_by_callback1(array callback_array,
|
|
[string file_ext_name, string meta_list, string group_name,
|
|
array tracker_server, array storage_server])
|
|
return file_id for success, false for error
|
|
*/
|
|
ZEND_FUNCTION(fastdfs_storage_upload_appender_by_callback1)
|
|
{
|
|
php_fdfs_storage_upload_file_impl(INTERNAL_FUNCTION_PARAM_PASSTHRU, \
|
|
&php_context, STORAGE_PROTO_CMD_UPLOAD_APPENDER_FILE, \
|
|
FDFS_UPLOAD_BY_CALLBACK, true);
|
|
}
|
|
|
|
/*
|
|
string/array fastdfs_storage_upload_slave_by_filename(string local_filename,
|
|
string group_name, string master_filename, string prefix_name
|
|
[, string file_ext_name, array meta_list,
|
|
array tracker_server, array storage_server])
|
|
return string/array for success, false for error
|
|
*/
|
|
ZEND_FUNCTION(fastdfs_storage_upload_slave_by_filename)
|
|
{
|
|
php_fdfs_storage_upload_slave_file_impl( \
|
|
INTERNAL_FUNCTION_PARAM_PASSTHRU, &php_context, \
|
|
FDFS_UPLOAD_BY_FILE, false);
|
|
}
|
|
|
|
/*
|
|
string fastdfs_storage_upload_slave_by_filename1(string local_filename,
|
|
string master_file_id, string prefix_name [, string file_ext_name,
|
|
string meta_list, array tracker_server, array storage_server])
|
|
return file_id for success, false for error
|
|
*/
|
|
ZEND_FUNCTION(fastdfs_storage_upload_slave_by_filename1)
|
|
{
|
|
php_fdfs_storage_upload_slave_file_impl( \
|
|
INTERNAL_FUNCTION_PARAM_PASSTHRU, &php_context, \
|
|
FDFS_UPLOAD_BY_FILE, true);
|
|
}
|
|
|
|
/*
|
|
array fastdfs_storage_upload_slave_by_filebuff(string file_buff,
|
|
string group_name, string master_filename, string prefix_name
|
|
[, string file_ext_name, array meta_list,
|
|
array tracker_server, array storage_server])
|
|
return array for success, false for error
|
|
*/
|
|
ZEND_FUNCTION(fastdfs_storage_upload_slave_by_filebuff)
|
|
{
|
|
php_fdfs_storage_upload_slave_file_impl( \
|
|
INTERNAL_FUNCTION_PARAM_PASSTHRU, &php_context, \
|
|
FDFS_UPLOAD_BY_BUFF, false);
|
|
}
|
|
|
|
/*
|
|
string fastdfs_storage_upload_slave_by_filebuff1(string file_buff,
|
|
string master_file_id, string prefix_name [, string file_ext_name,
|
|
string meta_list, array tracker_server, array storage_server])
|
|
return file_id for success, false for error
|
|
*/
|
|
ZEND_FUNCTION(fastdfs_storage_upload_slave_by_filebuff1)
|
|
{
|
|
php_fdfs_storage_upload_slave_file_impl( \
|
|
INTERNAL_FUNCTION_PARAM_PASSTHRU, &php_context, \
|
|
FDFS_UPLOAD_BY_BUFF, true);
|
|
}
|
|
|
|
/*
|
|
array fastdfs_storage_upload_slave_by_callback(array callback_array,
|
|
string group_name, string master_filename, string prefix_name
|
|
[, string file_ext_name, array meta_list,
|
|
array tracker_server, array storage_server])
|
|
return array for success, false for error
|
|
*/
|
|
ZEND_FUNCTION(fastdfs_storage_upload_slave_by_callback)
|
|
{
|
|
php_fdfs_storage_upload_slave_file_impl( \
|
|
INTERNAL_FUNCTION_PARAM_PASSTHRU, &php_context, \
|
|
FDFS_UPLOAD_BY_CALLBACK, false);
|
|
}
|
|
|
|
/*
|
|
string fastdfs_storage_upload_slave_by_callback1(array callback_array,
|
|
string group_name, string master_filename, string prefix_name
|
|
[, string file_ext_name, array meta_list,
|
|
array tracker_server, array storage_server])
|
|
return file_id for success, false for error
|
|
*/
|
|
ZEND_FUNCTION(fastdfs_storage_upload_slave_by_callback1)
|
|
{
|
|
php_fdfs_storage_upload_slave_file_impl( \
|
|
INTERNAL_FUNCTION_PARAM_PASSTHRU, &php_context, \
|
|
FDFS_UPLOAD_BY_CALLBACK, true);
|
|
}
|
|
|
|
/*
|
|
boolean fastdfs_storage_delete_file(string group_name, string remote_filename
|
|
[, array tracker_server, array storage_server])
|
|
return true for success, false for error
|
|
*/
|
|
ZEND_FUNCTION(fastdfs_storage_delete_file)
|
|
{
|
|
php_fdfs_storage_delete_file_impl(INTERNAL_FUNCTION_PARAM_PASSTHRU, \
|
|
&php_context, false);
|
|
}
|
|
|
|
/*
|
|
boolean fastdfs_storage_delete_file1(string file_id
|
|
[, array tracker_server, array storage_server])
|
|
return true for success, false for error
|
|
*/
|
|
ZEND_FUNCTION(fastdfs_storage_delete_file1)
|
|
{
|
|
php_fdfs_storage_delete_file_impl(INTERNAL_FUNCTION_PARAM_PASSTHRU, \
|
|
&php_context, true);
|
|
}
|
|
|
|
/*
|
|
boolean fastdfs_storage_truncate_file(string group_name,
|
|
string appender_filename [, long truncated_file_size = 0,
|
|
array tracker_server, array storage_server])
|
|
return true for success, false for error
|
|
*/
|
|
ZEND_FUNCTION(fastdfs_storage_truncate_file)
|
|
{
|
|
php_fdfs_storage_truncate_file_impl(INTERNAL_FUNCTION_PARAM_PASSTHRU, \
|
|
&php_context, false);
|
|
}
|
|
|
|
/*
|
|
boolean fastdfs_storage_truncate_file1(string appender_file_id
|
|
[, long truncated_file_size = 0, array tracker_server,
|
|
array storage_server])
|
|
return true for success, false for error
|
|
*/
|
|
ZEND_FUNCTION(fastdfs_storage_truncate_file1)
|
|
{
|
|
php_fdfs_storage_truncate_file_impl(INTERNAL_FUNCTION_PARAM_PASSTHRU, \
|
|
&php_context, true);
|
|
}
|
|
|
|
/*
|
|
string fastdfs_storage_download_file_to_buff(string group_name,
|
|
string remote_filename [, long file_offset, long download_bytes,
|
|
array tracker_server, array storage_server])
|
|
return file content for success, false for error
|
|
*/
|
|
ZEND_FUNCTION(fastdfs_storage_download_file_to_buff)
|
|
{
|
|
php_fdfs_storage_download_file_to_buff_impl( \
|
|
INTERNAL_FUNCTION_PARAM_PASSTHRU, &php_context, false);
|
|
}
|
|
|
|
/*
|
|
string fastdfs_storage_download_file_to_buff1(string file_id
|
|
[, long file_offset, long download_bytes,
|
|
array tracker_server, array storage_server])
|
|
return file content for success, false for error
|
|
*/
|
|
ZEND_FUNCTION(fastdfs_storage_download_file_to_buff1)
|
|
{
|
|
php_fdfs_storage_download_file_to_buff_impl( \
|
|
INTERNAL_FUNCTION_PARAM_PASSTHRU, &php_context, true);
|
|
}
|
|
|
|
/*
|
|
boolean fastdfs_storage_download_file_to_callback(string group_name,
|
|
string remote_filename, array download_callback [, long file_offset,
|
|
long download_bytes, array tracker_server, array storage_server])
|
|
return true for success, false for error
|
|
*/
|
|
ZEND_FUNCTION(fastdfs_storage_download_file_to_callback)
|
|
{
|
|
php_fdfs_storage_download_file_to_callback_impl( \
|
|
INTERNAL_FUNCTION_PARAM_PASSTHRU, &php_context, false);
|
|
}
|
|
|
|
/*
|
|
boolean fastdfs_storage_download_file_to_callback1(string file_id,
|
|
array download_callback [, long file_offset, long download_bytes,
|
|
array tracker_server, array storage_server])
|
|
return true for success, false for error
|
|
*/
|
|
ZEND_FUNCTION(fastdfs_storage_download_file_to_callback1)
|
|
{
|
|
php_fdfs_storage_download_file_to_callback_impl( \
|
|
INTERNAL_FUNCTION_PARAM_PASSTHRU, &php_context, true);
|
|
}
|
|
|
|
/*
|
|
boolean fastdfs_storage_download_file_to_file(string group_name,
|
|
string remote_filename, string local_filename [, long file_offset,
|
|
long download_bytes, array tracker_server, array storage_server])
|
|
return true for success, false for error
|
|
*/
|
|
ZEND_FUNCTION(fastdfs_storage_download_file_to_file)
|
|
{
|
|
php_fdfs_storage_download_file_to_file_impl( \
|
|
INTERNAL_FUNCTION_PARAM_PASSTHRU, &php_context, false);
|
|
}
|
|
|
|
/*
|
|
boolean fastdfs_storage_download_file_to_file1(string file_id,
|
|
string local_filename [, long file_offset, long download_bytes,
|
|
array tracker_server, array storage_server])
|
|
return true for success, false for error
|
|
*/
|
|
ZEND_FUNCTION(fastdfs_storage_download_file_to_file1)
|
|
{
|
|
php_fdfs_storage_download_file_to_file_impl( \
|
|
INTERNAL_FUNCTION_PARAM_PASSTHRU, &php_context, true);
|
|
}
|
|
|
|
/*
|
|
boolean fastdfs_storage_set_metadata(string group_name, string remote_filename,
|
|
array meta_list [, string op_type, array tracker_server,
|
|
array storage_server])
|
|
return true for success, false for error
|
|
*/
|
|
ZEND_FUNCTION(fastdfs_storage_set_metadata)
|
|
{
|
|
php_fdfs_storage_set_metadata_impl( \
|
|
INTERNAL_FUNCTION_PARAM_PASSTHRU, &php_context, false);
|
|
}
|
|
|
|
/*
|
|
boolean fastdfs_storage_set_metadata1(string file_id, array meta_list
|
|
[, string op_type, array tracker_server, array storage_server])
|
|
return true for success, false for error
|
|
*/
|
|
ZEND_FUNCTION(fastdfs_storage_set_metadata1)
|
|
{
|
|
php_fdfs_storage_set_metadata_impl( \
|
|
INTERNAL_FUNCTION_PARAM_PASSTHRU, &php_context, true);
|
|
}
|
|
|
|
/*
|
|
array fastdfs_storage_get_metadata(string group_name, string remote_filename
|
|
[, array tracker_server, array storage_server])
|
|
return array for success, false for error
|
|
*/
|
|
ZEND_FUNCTION(fastdfs_storage_get_metadata)
|
|
{
|
|
php_fdfs_storage_get_metadata_impl( \
|
|
INTERNAL_FUNCTION_PARAM_PASSTHRU, &php_context, false);
|
|
}
|
|
|
|
/*
|
|
array fastdfs_storage_get_metadata1(string file_id
|
|
[, array tracker_server, array storage_server])
|
|
return array for success, false for error
|
|
*/
|
|
ZEND_FUNCTION(fastdfs_storage_get_metadata1)
|
|
{
|
|
php_fdfs_storage_get_metadata_impl( \
|
|
INTERNAL_FUNCTION_PARAM_PASSTHRU, &php_context, true);
|
|
}
|
|
|
|
/*
|
|
boolean fastdfs_storage_file_exist(string group_name, string remote_filename
|
|
[, array tracker_server, array storage_server])
|
|
return true for exist, false for not exist
|
|
*/
|
|
ZEND_FUNCTION(fastdfs_storage_file_exist)
|
|
{
|
|
php_fdfs_storage_file_exist_impl( \
|
|
INTERNAL_FUNCTION_PARAM_PASSTHRU, &php_context, false);
|
|
}
|
|
|
|
/*
|
|
boolean fastdfs_storage_file_exist1(string file_id
|
|
[, array tracker_server, array storage_server])
|
|
return true for exist, false for not exist
|
|
*/
|
|
ZEND_FUNCTION(fastdfs_storage_file_exist1)
|
|
{
|
|
php_fdfs_storage_file_exist_impl( \
|
|
INTERNAL_FUNCTION_PARAM_PASSTHRU, &php_context, true);
|
|
}
|
|
|
|
/*
|
|
string fastdfs_http_gen_token(string file_id, int timestamp)
|
|
return token string for success, false for error
|
|
*/
|
|
ZEND_FUNCTION(fastdfs_http_gen_token)
|
|
{
|
|
php_fdfs_http_gen_token_impl( \
|
|
INTERNAL_FUNCTION_PARAM_PASSTHRU, &php_context);
|
|
}
|
|
|
|
/*
|
|
array fastdfs_get_file_info(string group_name, string remote_filename)
|
|
return array for success, false for error
|
|
*/
|
|
ZEND_FUNCTION(fastdfs_get_file_info)
|
|
{
|
|
php_fdfs_get_file_info_impl( \
|
|
INTERNAL_FUNCTION_PARAM_PASSTHRU, &php_context, false);
|
|
}
|
|
|
|
/*
|
|
array fastdfs_get_file_info1(string file_id)
|
|
return array for success, false for error
|
|
*/
|
|
ZEND_FUNCTION(fastdfs_get_file_info1)
|
|
{
|
|
php_fdfs_get_file_info_impl( \
|
|
INTERNAL_FUNCTION_PARAM_PASSTHRU, &php_context, true);
|
|
}
|
|
|
|
/*
|
|
bool fastdfs_send_data(int sock, string buff)
|
|
return true for success, false for error
|
|
*/
|
|
ZEND_FUNCTION(fastdfs_send_data)
|
|
{
|
|
php_fdfs_send_data_impl( \
|
|
INTERNAL_FUNCTION_PARAM_PASSTHRU, &php_context);
|
|
}
|
|
|
|
/*
|
|
string fastdfs_gen_slave_filename(string master_filename, string prefix_name
|
|
[, string file_ext_name])
|
|
return slave filename string for success, false for error
|
|
*/
|
|
ZEND_FUNCTION(fastdfs_gen_slave_filename)
|
|
{
|
|
php_fdfs_gen_slave_filename_impl( \
|
|
INTERNAL_FUNCTION_PARAM_PASSTHRU, &php_context);
|
|
}
|
|
|
|
static void php_fdfs_close(php_fdfs_t *i_obj TSRMLS_DC)
|
|
{
|
|
if (i_obj->context.pTrackerGroup == NULL)
|
|
{
|
|
return;
|
|
}
|
|
|
|
if (i_obj->context.pTrackerGroup != i_obj->pConfigInfo->pTrackerGroup)
|
|
{
|
|
tracker_close_all_connections_ex(i_obj->context.pTrackerGroup);
|
|
}
|
|
}
|
|
|
|
/* constructor/destructor */
|
|
static void php_fdfs_destroy(php_fdfs_t *i_obj TSRMLS_DC)
|
|
{
|
|
php_fdfs_close(i_obj TSRMLS_CC);
|
|
if (i_obj->context.pTrackerGroup != NULL && i_obj->context.pTrackerGroup != \
|
|
i_obj->pConfigInfo->pTrackerGroup)
|
|
{
|
|
fdfs_client_destroy_ex(i_obj->context.pTrackerGroup);
|
|
efree(i_obj->context.pTrackerGroup);
|
|
i_obj->context.pTrackerGroup = NULL;
|
|
}
|
|
|
|
efree(i_obj);
|
|
}
|
|
|
|
ZEND_RSRC_DTOR_FUNC(php_fdfs_dtor)
|
|
{
|
|
if (rsrc->ptr != NULL)
|
|
{
|
|
php_fdfs_t *i_obj = (php_fdfs_t *)rsrc->ptr;
|
|
php_fdfs_destroy(i_obj TSRMLS_CC);
|
|
rsrc->ptr = NULL;
|
|
}
|
|
}
|
|
|
|
/* FastDFS::__construct([int config_index = 0, bool bMultiThread = false])
|
|
Creates a FastDFS object */
|
|
static PHP_METHOD(FastDFS, __construct)
|
|
{
|
|
long config_index;
|
|
bool bMultiThread;
|
|
zval *object = getThis();
|
|
php_fdfs_t *i_obj;
|
|
|
|
config_index = 0;
|
|
bMultiThread = false;
|
|
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|lb", \
|
|
&config_index, &bMultiThread) == FAILURE)
|
|
{
|
|
logError("file: "__FILE__", line: %d, " \
|
|
"zend_parse_parameters fail!", __LINE__);
|
|
ZVAL_NULL(object);
|
|
return;
|
|
}
|
|
|
|
if (config_index < 0 || config_index >= config_count)
|
|
{
|
|
logError("file: "__FILE__", line: %d, " \
|
|
"invalid config_index: %ld < 0 || >= %d", \
|
|
__LINE__, config_index, config_count);
|
|
ZVAL_NULL(object);
|
|
return;
|
|
}
|
|
|
|
i_obj = (php_fdfs_t *) zend_object_store_get_object(object TSRMLS_CC);
|
|
i_obj->pConfigInfo = config_list + config_index;
|
|
i_obj->context.err_no = 0;
|
|
if (bMultiThread)
|
|
{
|
|
i_obj->context.pTrackerGroup = (TrackerServerGroup *)emalloc( \
|
|
sizeof(TrackerServerGroup));
|
|
if (i_obj->context.pTrackerGroup == NULL)
|
|
{
|
|
logError("file: "__FILE__", line: %d, " \
|
|
"malloc %d bytes fail!", __LINE__, \
|
|
(int)sizeof(TrackerServerGroup));
|
|
ZVAL_NULL(object);
|
|
return;
|
|
}
|
|
|
|
if (fdfs_copy_tracker_group(i_obj->context.pTrackerGroup, \
|
|
i_obj->pConfigInfo->pTrackerGroup) != 0)
|
|
{
|
|
ZVAL_NULL(object);
|
|
return;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
i_obj->context.pTrackerGroup = i_obj->pConfigInfo->pTrackerGroup;
|
|
}
|
|
}
|
|
|
|
/*
|
|
array FastDFS::tracker_get_connection()
|
|
return array for success, false for error
|
|
*/
|
|
PHP_METHOD(FastDFS, tracker_get_connection)
|
|
{
|
|
zval *object = getThis();
|
|
php_fdfs_t *i_obj;
|
|
|
|
i_obj = (php_fdfs_t *) zend_object_store_get_object(object TSRMLS_CC);
|
|
php_fdfs_tracker_get_connection_impl(INTERNAL_FUNCTION_PARAM_PASSTHRU, \
|
|
&(i_obj->context));
|
|
}
|
|
|
|
/*
|
|
boolean FastDFS::tracker_make_all_connections()
|
|
return true for success, false for error
|
|
*/
|
|
PHP_METHOD(FastDFS, tracker_make_all_connections)
|
|
{
|
|
zval *object = getThis();
|
|
php_fdfs_t *i_obj;
|
|
|
|
i_obj = (php_fdfs_t *) zend_object_store_get_object(object TSRMLS_CC);
|
|
php_fdfs_tracker_make_all_connections_impl( \
|
|
INTERNAL_FUNCTION_PARAM_PASSTHRU, &(i_obj->context));
|
|
}
|
|
|
|
/*
|
|
boolean FastDFS::tracker_close_all_connections()
|
|
return true for success, false for error
|
|
*/
|
|
PHP_METHOD(FastDFS, tracker_close_all_connections)
|
|
{
|
|
zval *object = getThis();
|
|
php_fdfs_t *i_obj;
|
|
|
|
i_obj = (php_fdfs_t *) zend_object_store_get_object(object TSRMLS_CC);
|
|
php_fdfs_tracker_close_all_connections_impl( \
|
|
INTERNAL_FUNCTION_PARAM_PASSTHRU, &(i_obj->context));
|
|
}
|
|
|
|
/*
|
|
array FastDFS::connect_server(string ip_addr, int port)
|
|
return array for success, false for error
|
|
*/
|
|
PHP_METHOD(FastDFS, connect_server)
|
|
{
|
|
zval *object = getThis();
|
|
php_fdfs_t *i_obj;
|
|
|
|
i_obj = (php_fdfs_t *) zend_object_store_get_object(object TSRMLS_CC);
|
|
php_fdfs_connect_server_impl(INTERNAL_FUNCTION_PARAM_PASSTHRU, \
|
|
&(i_obj->context));
|
|
}
|
|
|
|
/*
|
|
boolean FastDFS::disconnect_server(array serverInfo)
|
|
return true for success, false for error
|
|
*/
|
|
PHP_METHOD(FastDFS, disconnect_server)
|
|
{
|
|
zval *object = getThis();
|
|
php_fdfs_t *i_obj;
|
|
|
|
i_obj = (php_fdfs_t *) zend_object_store_get_object(object TSRMLS_CC);
|
|
php_fdfs_disconnect_server_impl(INTERNAL_FUNCTION_PARAM_PASSTHRU, \
|
|
&(i_obj->context));
|
|
}
|
|
|
|
/*
|
|
boolean FastDFS::active_test(array serverInfo)
|
|
return true for success, false for error
|
|
*/
|
|
PHP_METHOD(FastDFS, active_test)
|
|
{
|
|
zval *object = getThis();
|
|
php_fdfs_t *i_obj;
|
|
|
|
i_obj = (php_fdfs_t *) zend_object_store_get_object(object TSRMLS_CC);
|
|
php_fastdfs_active_test_impl(INTERNAL_FUNCTION_PARAM_PASSTHRU, \
|
|
&(i_obj->context));
|
|
}
|
|
|
|
/*
|
|
array FastDFS::tracker_list_groups([string group_name, array tracker_server])
|
|
return array for success, false for error
|
|
*/
|
|
PHP_METHOD(FastDFS, tracker_list_groups)
|
|
{
|
|
zval *object = getThis();
|
|
php_fdfs_t *i_obj;
|
|
|
|
i_obj = (php_fdfs_t *) zend_object_store_get_object(object TSRMLS_CC);
|
|
php_fdfs_tracker_list_groups_impl(INTERNAL_FUNCTION_PARAM_PASSTHRU, \
|
|
&(i_obj->context));
|
|
}
|
|
|
|
/*
|
|
array FastDFS::tracker_query_storage_store([string group_name,
|
|
array tracker_server])
|
|
return array for success, false for error
|
|
*/
|
|
PHP_METHOD(FastDFS, tracker_query_storage_store)
|
|
{
|
|
zval *object = getThis();
|
|
php_fdfs_t *i_obj;
|
|
|
|
i_obj = (php_fdfs_t *) zend_object_store_get_object(object TSRMLS_CC);
|
|
php_fdfs_tracker_query_storage_store_impl( \
|
|
INTERNAL_FUNCTION_PARAM_PASSTHRU, \
|
|
&(i_obj->context));
|
|
}
|
|
|
|
/*
|
|
array FastDFS::tracker_query_storage_store_list([string group_name,
|
|
array tracker_server])
|
|
return array for success, false for error
|
|
*/
|
|
PHP_METHOD(FastDFS, tracker_query_storage_store_list)
|
|
{
|
|
zval *object = getThis();
|
|
php_fdfs_t *i_obj;
|
|
|
|
i_obj = (php_fdfs_t *) zend_object_store_get_object(object TSRMLS_CC);
|
|
php_fdfs_tracker_query_storage_store_list_impl( \
|
|
INTERNAL_FUNCTION_PARAM_PASSTHRU, \
|
|
&(i_obj->context));
|
|
}
|
|
|
|
/*
|
|
array FastDFS::tracker_query_storage_update(string group_name,
|
|
string remote_filename [, array tracker_server])
|
|
return array for success, false for error
|
|
*/
|
|
PHP_METHOD(FastDFS, tracker_query_storage_update)
|
|
{
|
|
zval *object = getThis();
|
|
php_fdfs_t *i_obj;
|
|
|
|
i_obj = (php_fdfs_t *) zend_object_store_get_object(object TSRMLS_CC);
|
|
php_fdfs_tracker_do_query_storage_impl( \
|
|
INTERNAL_FUNCTION_PARAM_PASSTHRU, &(i_obj->context), \
|
|
TRACKER_PROTO_CMD_SERVICE_QUERY_UPDATE, false);
|
|
}
|
|
|
|
/*
|
|
array FastDFS::tracker_query_storage_fetch(string group_name,
|
|
string remote_filename [, array tracker_server])
|
|
return array for success, false for error
|
|
*/
|
|
PHP_METHOD(FastDFS, tracker_query_storage_fetch)
|
|
{
|
|
zval *object = getThis();
|
|
php_fdfs_t *i_obj;
|
|
|
|
i_obj = (php_fdfs_t *) zend_object_store_get_object(object TSRMLS_CC);
|
|
php_fdfs_tracker_do_query_storage_impl( \
|
|
INTERNAL_FUNCTION_PARAM_PASSTHRU, &(i_obj->context), \
|
|
TRACKER_PROTO_CMD_SERVICE_QUERY_FETCH_ONE, false);
|
|
}
|
|
|
|
/*
|
|
array FastDFS::tracker_query_storage_list(string group_name,
|
|
string remote_filename [, array tracker_server])
|
|
return array for success, false for error
|
|
*/
|
|
PHP_METHOD(FastDFS, tracker_query_storage_list)
|
|
{
|
|
zval *object = getThis();
|
|
php_fdfs_t *i_obj;
|
|
|
|
i_obj = (php_fdfs_t *) zend_object_store_get_object(object TSRMLS_CC);
|
|
php_fdfs_tracker_query_storage_list_impl( \
|
|
INTERNAL_FUNCTION_PARAM_PASSTHRU, &(i_obj->context), false);
|
|
}
|
|
|
|
/*
|
|
boolean FastDFS::tracker_delete_storage(string group_name, string storage_ip)
|
|
return true for success, false for error
|
|
*/
|
|
PHP_METHOD(FastDFS, tracker_delete_storage)
|
|
{
|
|
zval *object = getThis();
|
|
php_fdfs_t *i_obj;
|
|
|
|
i_obj = (php_fdfs_t *) zend_object_store_get_object(object TSRMLS_CC);
|
|
php_fdfs_tracker_delete_storage_impl( \
|
|
INTERNAL_FUNCTION_PARAM_PASSTHRU, &(i_obj->context));
|
|
}
|
|
|
|
/*
|
|
array FastDFS::tracker_query_storage_update1(string file_id
|
|
[, array tracker_server])
|
|
return array for success, false for error
|
|
*/
|
|
PHP_METHOD(FastDFS, tracker_query_storage_update1)
|
|
{
|
|
zval *object = getThis();
|
|
php_fdfs_t *i_obj;
|
|
|
|
i_obj = (php_fdfs_t *) zend_object_store_get_object(object TSRMLS_CC);
|
|
php_fdfs_tracker_do_query_storage_impl( \
|
|
INTERNAL_FUNCTION_PARAM_PASSTHRU, &(i_obj->context), \
|
|
TRACKER_PROTO_CMD_SERVICE_QUERY_UPDATE, true);
|
|
}
|
|
|
|
/*
|
|
array FastDFS::tracker_query_storage_fetch1(string file_id
|
|
[, array tracker_server])
|
|
return array for success, false for error
|
|
*/
|
|
PHP_METHOD(FastDFS, tracker_query_storage_fetch1)
|
|
{
|
|
zval *object = getThis();
|
|
php_fdfs_t *i_obj;
|
|
|
|
i_obj = (php_fdfs_t *) zend_object_store_get_object(object TSRMLS_CC);
|
|
php_fdfs_tracker_do_query_storage_impl( \
|
|
INTERNAL_FUNCTION_PARAM_PASSTHRU, &(i_obj->context), \
|
|
TRACKER_PROTO_CMD_SERVICE_QUERY_FETCH_ONE, true);
|
|
}
|
|
|
|
/*
|
|
array FastDFS::tracker_query_storage_list1(string file_id
|
|
[, array tracker_server])
|
|
return array for success, false for error
|
|
*/
|
|
PHP_METHOD(FastDFS, tracker_query_storage_list1)
|
|
{
|
|
zval *object = getThis();
|
|
php_fdfs_t *i_obj;
|
|
|
|
i_obj = (php_fdfs_t *) zend_object_store_get_object(object TSRMLS_CC);
|
|
php_fdfs_tracker_query_storage_list_impl( \
|
|
INTERNAL_FUNCTION_PARAM_PASSTHRU, &(i_obj->context), true);
|
|
}
|
|
|
|
/*
|
|
array FastDFS::storage_upload_by_filename(string local_filename,
|
|
[string file_ext_name, string meta_list, string group_name,
|
|
array tracker_server, array storage_server])
|
|
return array for success, false for error
|
|
*/
|
|
PHP_METHOD(FastDFS, storage_upload_by_filename)
|
|
{
|
|
zval *object = getThis();
|
|
php_fdfs_t *i_obj;
|
|
|
|
i_obj = (php_fdfs_t *) zend_object_store_get_object(object TSRMLS_CC);
|
|
php_fdfs_storage_upload_file_impl(INTERNAL_FUNCTION_PARAM_PASSTHRU, \
|
|
&(i_obj->context), STORAGE_PROTO_CMD_UPLOAD_FILE, \
|
|
FDFS_UPLOAD_BY_FILE, false);
|
|
}
|
|
|
|
/*
|
|
string FastDFS::storage_upload_by_filename1(string local_filename,
|
|
[string file_ext_name, string meta_list, string group_name,
|
|
array tracker_server, array storage_server])
|
|
return file_id for success, false for error
|
|
*/
|
|
PHP_METHOD(FastDFS, storage_upload_by_filename1)
|
|
{
|
|
zval *object = getThis();
|
|
php_fdfs_t *i_obj;
|
|
|
|
i_obj = (php_fdfs_t *) zend_object_store_get_object(object TSRMLS_CC);
|
|
php_fdfs_storage_upload_file_impl(INTERNAL_FUNCTION_PARAM_PASSTHRU, \
|
|
&(i_obj->context), STORAGE_PROTO_CMD_UPLOAD_FILE, \
|
|
FDFS_UPLOAD_BY_FILE, true);
|
|
}
|
|
|
|
/*
|
|
array FastDFS::storage_upload_by_filebuff(string file_buff,
|
|
[string file_ext_name, string meta_list, string group_name,
|
|
array tracker_server, array storage_server])
|
|
return array for success, false for error
|
|
*/
|
|
PHP_METHOD(FastDFS, storage_upload_by_filebuff)
|
|
{
|
|
zval *object = getThis();
|
|
php_fdfs_t *i_obj;
|
|
|
|
i_obj = (php_fdfs_t *) zend_object_store_get_object(object TSRMLS_CC);
|
|
php_fdfs_storage_upload_file_impl(INTERNAL_FUNCTION_PARAM_PASSTHRU, \
|
|
&(i_obj->context), STORAGE_PROTO_CMD_UPLOAD_FILE, \
|
|
FDFS_UPLOAD_BY_BUFF, false);
|
|
}
|
|
|
|
/*
|
|
string FastDFS::storage_upload_by_filebuff1(string file_buff,
|
|
[string file_ext_name, string meta_list, string group_name,
|
|
array tracker_server, array storage_server])
|
|
return file_id for success, false for error
|
|
*/
|
|
PHP_METHOD(FastDFS, storage_upload_by_filebuff1)
|
|
{
|
|
zval *object = getThis();
|
|
php_fdfs_t *i_obj;
|
|
|
|
i_obj = (php_fdfs_t *) zend_object_store_get_object(object TSRMLS_CC);
|
|
php_fdfs_storage_upload_file_impl(INTERNAL_FUNCTION_PARAM_PASSTHRU, \
|
|
&(i_obj->context), STORAGE_PROTO_CMD_UPLOAD_FILE, \
|
|
FDFS_UPLOAD_BY_BUFF, true);
|
|
}
|
|
|
|
/*
|
|
array FastDFS::storage_upload_by_callback(array callback_array,
|
|
[string file_ext_name, string meta_list, string group_name,
|
|
array tracker_server, array storage_server])
|
|
return array for success, false for error
|
|
*/
|
|
PHP_METHOD(FastDFS, storage_upload_by_callback)
|
|
{
|
|
zval *object = getThis();
|
|
php_fdfs_t *i_obj;
|
|
|
|
i_obj = (php_fdfs_t *) zend_object_store_get_object(object TSRMLS_CC);
|
|
php_fdfs_storage_upload_file_impl(INTERNAL_FUNCTION_PARAM_PASSTHRU, \
|
|
&(i_obj->context), STORAGE_PROTO_CMD_UPLOAD_FILE, \
|
|
FDFS_UPLOAD_BY_CALLBACK, false);
|
|
}
|
|
|
|
/*
|
|
string FastDFS::storage_upload_by_callback1(array callback_array,
|
|
[string file_ext_name, string meta_list, string group_name,
|
|
array tracker_server, array storage_server])
|
|
return file_id for success, false for error
|
|
*/
|
|
PHP_METHOD(FastDFS, storage_upload_by_callback1)
|
|
{
|
|
zval *object = getThis();
|
|
php_fdfs_t *i_obj;
|
|
|
|
i_obj = (php_fdfs_t *) zend_object_store_get_object(object TSRMLS_CC);
|
|
php_fdfs_storage_upload_file_impl(INTERNAL_FUNCTION_PARAM_PASSTHRU, \
|
|
&(i_obj->context), STORAGE_PROTO_CMD_UPLOAD_FILE, \
|
|
FDFS_UPLOAD_BY_CALLBACK, true);
|
|
}
|
|
|
|
/*
|
|
boolean FastDFS::storage_append_by_filename(string local_filename,
|
|
string group_name, appender_filename
|
|
[, array tracker_server, array storage_server])
|
|
return string/array for success, false for error
|
|
*/
|
|
PHP_METHOD(FastDFS, storage_append_by_filename)
|
|
{
|
|
zval *object = getThis();
|
|
php_fdfs_t *i_obj;
|
|
|
|
i_obj = (php_fdfs_t *) zend_object_store_get_object(object TSRMLS_CC);
|
|
php_fdfs_storage_append_file_impl(INTERNAL_FUNCTION_PARAM_PASSTHRU, \
|
|
&(i_obj->context), FDFS_UPLOAD_BY_FILE, false);
|
|
}
|
|
|
|
/*
|
|
string FastDFS::storage_upload_by_filename1(string local_filename,
|
|
string appender_file_id
|
|
[, array tracker_server, array storage_server])
|
|
return file_id for success, false for error
|
|
*/
|
|
PHP_METHOD(FastDFS, storage_append_by_filename1)
|
|
{
|
|
zval *object = getThis();
|
|
php_fdfs_t *i_obj;
|
|
|
|
i_obj = (php_fdfs_t *) zend_object_store_get_object(object TSRMLS_CC);
|
|
php_fdfs_storage_append_file_impl(INTERNAL_FUNCTION_PARAM_PASSTHRU, \
|
|
&(i_obj->context), FDFS_UPLOAD_BY_FILE, true);
|
|
}
|
|
|
|
/*
|
|
array FastDFS::storage_append_by_filebuff(string file_buff,
|
|
string group_name, string appender_filename
|
|
[, array tracker_server, array storage_server])
|
|
return array for success, false for error
|
|
*/
|
|
PHP_METHOD(FastDFS, storage_append_by_filebuff)
|
|
{
|
|
zval *object = getThis();
|
|
php_fdfs_t *i_obj;
|
|
|
|
i_obj = (php_fdfs_t *) zend_object_store_get_object(object TSRMLS_CC);
|
|
php_fdfs_storage_append_file_impl(INTERNAL_FUNCTION_PARAM_PASSTHRU, \
|
|
&(i_obj->context), FDFS_UPLOAD_BY_BUFF, false);
|
|
}
|
|
|
|
/*
|
|
string FastDFS::storage_append_by_filebuff1(string file_buff,
|
|
string appender_file_id
|
|
[, array tracker_server, array storage_server])
|
|
return file_id for success, false for error
|
|
*/
|
|
PHP_METHOD(FastDFS, storage_append_by_filebuff1)
|
|
{
|
|
zval *object = getThis();
|
|
php_fdfs_t *i_obj;
|
|
|
|
i_obj = (php_fdfs_t *) zend_object_store_get_object(object TSRMLS_CC);
|
|
php_fdfs_storage_append_file_impl(INTERNAL_FUNCTION_PARAM_PASSTHRU, \
|
|
&(i_obj->context), FDFS_UPLOAD_BY_BUFF, true);
|
|
}
|
|
|
|
/*
|
|
array FastDFS::storage_append_by_callback(array callback_array,
|
|
string group_name, string appender_filename
|
|
[, array tracker_server, array storage_server])
|
|
return array for success, false for error
|
|
*/
|
|
PHP_METHOD(FastDFS, storage_append_by_callback)
|
|
{
|
|
zval *object = getThis();
|
|
php_fdfs_t *i_obj;
|
|
|
|
i_obj = (php_fdfs_t *) zend_object_store_get_object(object TSRMLS_CC);
|
|
php_fdfs_storage_append_file_impl(INTERNAL_FUNCTION_PARAM_PASSTHRU, \
|
|
&(i_obj->context), FDFS_UPLOAD_BY_CALLBACK, false);
|
|
}
|
|
|
|
/*
|
|
string FastDFS::storage_append_by_callback1(array callback_array,
|
|
string group_name, string appender_filename
|
|
[, array tracker_server, array storage_server])
|
|
return file_id for success, false for error
|
|
*/
|
|
PHP_METHOD(FastDFS, storage_append_by_callback1)
|
|
{
|
|
zval *object = getThis();
|
|
php_fdfs_t *i_obj;
|
|
|
|
i_obj = (php_fdfs_t *) zend_object_store_get_object(object TSRMLS_CC);
|
|
php_fdfs_storage_append_file_impl(INTERNAL_FUNCTION_PARAM_PASSTHRU, \
|
|
&(i_obj->context), FDFS_UPLOAD_BY_CALLBACK, true);
|
|
}
|
|
|
|
|
|
/*
|
|
boolean FastDFS::storage_modify_by_filename(string local_filename,
|
|
long file_offset, string group_name, appender_filename
|
|
[, array tracker_server, array storage_server])
|
|
return true for success, false for error
|
|
*/
|
|
PHP_METHOD(FastDFS, storage_modify_by_filename)
|
|
{
|
|
zval *object = getThis();
|
|
php_fdfs_t *i_obj;
|
|
|
|
i_obj = (php_fdfs_t *) zend_object_store_get_object(object TSRMLS_CC);
|
|
php_fdfs_storage_modify_file_impl(INTERNAL_FUNCTION_PARAM_PASSTHRU, \
|
|
&(i_obj->context), FDFS_UPLOAD_BY_FILE, false);
|
|
}
|
|
|
|
/*
|
|
boolean FastDFS::storage_modify_by_filename1(string local_filename,
|
|
long file_offset, string appender_file_id
|
|
[, array tracker_server, array storage_server])
|
|
return true for success, false for error
|
|
*/
|
|
PHP_METHOD(FastDFS, storage_modify_by_filename1)
|
|
{
|
|
zval *object = getThis();
|
|
php_fdfs_t *i_obj;
|
|
|
|
i_obj = (php_fdfs_t *) zend_object_store_get_object(object TSRMLS_CC);
|
|
php_fdfs_storage_modify_file_impl(INTERNAL_FUNCTION_PARAM_PASSTHRU, \
|
|
&(i_obj->context), FDFS_UPLOAD_BY_FILE, true);
|
|
}
|
|
|
|
/*
|
|
boolean FastDFS::storage_modify_by_filebuff(string file_buff,
|
|
long file_offset, string group_name, string appender_filename
|
|
[, array tracker_server, array storage_server])
|
|
return true for success, false for error
|
|
*/
|
|
PHP_METHOD(FastDFS, storage_modify_by_filebuff)
|
|
{
|
|
zval *object = getThis();
|
|
php_fdfs_t *i_obj;
|
|
|
|
i_obj = (php_fdfs_t *) zend_object_store_get_object(object TSRMLS_CC);
|
|
php_fdfs_storage_modify_file_impl(INTERNAL_FUNCTION_PARAM_PASSTHRU, \
|
|
&(i_obj->context), FDFS_UPLOAD_BY_BUFF, false);
|
|
}
|
|
|
|
/*
|
|
boolean FastDFS::storage_modify_by_filebuff1(string file_buff,
|
|
long file_offset, string appender_file_id
|
|
[, array tracker_server, array storage_server])
|
|
return true for success, false for error
|
|
*/
|
|
PHP_METHOD(FastDFS, storage_modify_by_filebuff1)
|
|
{
|
|
zval *object = getThis();
|
|
php_fdfs_t *i_obj;
|
|
|
|
i_obj = (php_fdfs_t *) zend_object_store_get_object(object TSRMLS_CC);
|
|
php_fdfs_storage_modify_file_impl(INTERNAL_FUNCTION_PARAM_PASSTHRU, \
|
|
&(i_obj->context), FDFS_UPLOAD_BY_BUFF, true);
|
|
}
|
|
|
|
/*
|
|
boolean FastDFS::storage_modify_by_callback(array callback_array,
|
|
long file_offset, string group_name, string appender_filename
|
|
[, array tracker_server, array storage_server])
|
|
return true for success, false for error
|
|
*/
|
|
PHP_METHOD(FastDFS, storage_modify_by_callback)
|
|
{
|
|
zval *object = getThis();
|
|
php_fdfs_t *i_obj;
|
|
|
|
i_obj = (php_fdfs_t *) zend_object_store_get_object(object TSRMLS_CC);
|
|
php_fdfs_storage_modify_file_impl(INTERNAL_FUNCTION_PARAM_PASSTHRU, \
|
|
&(i_obj->context), FDFS_UPLOAD_BY_CALLBACK, false);
|
|
}
|
|
|
|
/*
|
|
boolean FastDFS::storage_modify_by_callback1(array callback_array,
|
|
long file_offset, string group_name, string appender_filename
|
|
[, array tracker_server, array storage_server])
|
|
return true for success, false for error
|
|
*/
|
|
PHP_METHOD(FastDFS, storage_modify_by_callback1)
|
|
{
|
|
zval *object = getThis();
|
|
php_fdfs_t *i_obj;
|
|
|
|
i_obj = (php_fdfs_t *) zend_object_store_get_object(object TSRMLS_CC);
|
|
php_fdfs_storage_modify_file_impl(INTERNAL_FUNCTION_PARAM_PASSTHRU, \
|
|
&(i_obj->context), FDFS_UPLOAD_BY_CALLBACK, true);
|
|
}
|
|
|
|
/*
|
|
array FastDFS::storage_upload_appender_by_filename(string local_filename,
|
|
[string file_ext_name, string meta_list, string group_name,
|
|
array tracker_server, array storage_server])
|
|
return array for success, false for error
|
|
*/
|
|
PHP_METHOD(FastDFS, storage_upload_appender_by_filename)
|
|
{
|
|
zval *object = getThis();
|
|
php_fdfs_t *i_obj;
|
|
|
|
i_obj = (php_fdfs_t *) zend_object_store_get_object(object TSRMLS_CC);
|
|
php_fdfs_storage_upload_file_impl(INTERNAL_FUNCTION_PARAM_PASSTHRU, \
|
|
&(i_obj->context), STORAGE_PROTO_CMD_UPLOAD_APPENDER_FILE, \
|
|
FDFS_UPLOAD_BY_FILE, false);
|
|
}
|
|
|
|
/*
|
|
string FastDFS::storage_upload_appender_by_filename1(string local_filename,
|
|
[string file_ext_name, string meta_list, string group_name,
|
|
array tracker_server, array storage_server])
|
|
return file_id for success, false for error
|
|
*/
|
|
PHP_METHOD(FastDFS, storage_upload_appender_by_filename1)
|
|
{
|
|
zval *object = getThis();
|
|
php_fdfs_t *i_obj;
|
|
|
|
i_obj = (php_fdfs_t *) zend_object_store_get_object(object TSRMLS_CC);
|
|
php_fdfs_storage_upload_file_impl(INTERNAL_FUNCTION_PARAM_PASSTHRU, \
|
|
&(i_obj->context), STORAGE_PROTO_CMD_UPLOAD_APPENDER_FILE, \
|
|
FDFS_UPLOAD_BY_FILE, true);
|
|
}
|
|
|
|
/*
|
|
array FastDFS::storage_upload_appender_by_filebuff(string file_buff,
|
|
[string file_ext_name, string meta_list, string group_name,
|
|
array tracker_server, array storage_server])
|
|
return array for success, false for error
|
|
*/
|
|
PHP_METHOD(FastDFS, storage_upload_appender_by_filebuff)
|
|
{
|
|
zval *object = getThis();
|
|
php_fdfs_t *i_obj;
|
|
|
|
i_obj = (php_fdfs_t *) zend_object_store_get_object(object TSRMLS_CC);
|
|
php_fdfs_storage_upload_file_impl(INTERNAL_FUNCTION_PARAM_PASSTHRU, \
|
|
&(i_obj->context), STORAGE_PROTO_CMD_UPLOAD_APPENDER_FILE, \
|
|
FDFS_UPLOAD_BY_BUFF, false);
|
|
}
|
|
|
|
/*
|
|
string FastDFS::storage_upload_appender_by_filebuff1(string file_buff,
|
|
[string file_ext_name, string meta_list, string group_name,
|
|
array tracker_server, array storage_server])
|
|
return file_id for success, false for error
|
|
*/
|
|
PHP_METHOD(FastDFS, storage_upload_appender_by_filebuff1)
|
|
{
|
|
zval *object = getThis();
|
|
php_fdfs_t *i_obj;
|
|
|
|
i_obj = (php_fdfs_t *) zend_object_store_get_object(object TSRMLS_CC);
|
|
php_fdfs_storage_upload_file_impl(INTERNAL_FUNCTION_PARAM_PASSTHRU, \
|
|
&(i_obj->context), STORAGE_PROTO_CMD_UPLOAD_APPENDER_FILE, \
|
|
FDFS_UPLOAD_BY_BUFF, true);
|
|
}
|
|
|
|
/*
|
|
array FastDFS::storage_upload_appender_by_callback(array callback_array,
|
|
[string file_ext_name, string meta_list, string group_name,
|
|
array tracker_server, array storage_server])
|
|
return array for success, false for error
|
|
*/
|
|
PHP_METHOD(FastDFS, storage_upload_appender_by_callback)
|
|
{
|
|
zval *object = getThis();
|
|
php_fdfs_t *i_obj;
|
|
|
|
i_obj = (php_fdfs_t *) zend_object_store_get_object(object TSRMLS_CC);
|
|
php_fdfs_storage_upload_file_impl(INTERNAL_FUNCTION_PARAM_PASSTHRU, \
|
|
&(i_obj->context), STORAGE_PROTO_CMD_UPLOAD_APPENDER_FILE, \
|
|
FDFS_UPLOAD_BY_CALLBACK, false);
|
|
}
|
|
|
|
/*
|
|
string FastDFS::storage_upload_appender_by_callback1(array callback_array,
|
|
[string file_ext_name, string meta_list, string group_name,
|
|
array tracker_server, array storage_server])
|
|
return file_id for success, false for error
|
|
*/
|
|
PHP_METHOD(FastDFS, storage_upload_appender_by_callback1)
|
|
{
|
|
zval *object = getThis();
|
|
php_fdfs_t *i_obj;
|
|
|
|
i_obj = (php_fdfs_t *) zend_object_store_get_object(object TSRMLS_CC);
|
|
php_fdfs_storage_upload_file_impl(INTERNAL_FUNCTION_PARAM_PASSTHRU, \
|
|
&(i_obj->context), STORAGE_PROTO_CMD_UPLOAD_APPENDER_FILE, \
|
|
FDFS_UPLOAD_BY_CALLBACK, true);
|
|
}
|
|
|
|
|
|
/*
|
|
array FastDFS::storage_upload_slave_by_filename(string local_filename,
|
|
string group_name, string master_filename, string prefix_name
|
|
[, string file_ext_name, string meta_list,
|
|
array tracker_server, array storage_server])
|
|
return array for success, false for error
|
|
*/
|
|
PHP_METHOD(FastDFS, storage_upload_slave_by_filename)
|
|
{
|
|
zval *object = getThis();
|
|
php_fdfs_t *i_obj;
|
|
|
|
i_obj = (php_fdfs_t *) zend_object_store_get_object(object TSRMLS_CC);
|
|
php_fdfs_storage_upload_slave_file_impl( \
|
|
INTERNAL_FUNCTION_PARAM_PASSTHRU, &(i_obj->context), \
|
|
FDFS_UPLOAD_BY_FILE, false);
|
|
}
|
|
|
|
/*
|
|
string FastDFS::storage_upload_slave_by_filename1(string local_filename,
|
|
string master_file_id, string prefix_name
|
|
[, string file_ext_name, string meta_list,
|
|
array tracker_server, array storage_server])
|
|
return file_id for success, false for error
|
|
*/
|
|
PHP_METHOD(FastDFS, storage_upload_slave_by_filename1)
|
|
{
|
|
zval *object = getThis();
|
|
php_fdfs_t *i_obj;
|
|
|
|
i_obj = (php_fdfs_t *) zend_object_store_get_object(object TSRMLS_CC);
|
|
php_fdfs_storage_upload_slave_file_impl( \
|
|
INTERNAL_FUNCTION_PARAM_PASSTHRU, &(i_obj->context), \
|
|
FDFS_UPLOAD_BY_FILE, true);
|
|
}
|
|
|
|
/*
|
|
array FastDFS::storage_upload_slave_by_filebuff(string file_buff,
|
|
string group_name, string master_filename, string prefix_name
|
|
[, string file_ext_name, string meta_list,
|
|
array tracker_server, array storage_server])
|
|
return array for success, false for error
|
|
*/
|
|
PHP_METHOD(FastDFS, storage_upload_slave_by_filebuff)
|
|
{
|
|
zval *object = getThis();
|
|
php_fdfs_t *i_obj;
|
|
|
|
i_obj = (php_fdfs_t *) zend_object_store_get_object(object TSRMLS_CC);
|
|
php_fdfs_storage_upload_slave_file_impl( \
|
|
INTERNAL_FUNCTION_PARAM_PASSTHRU, &(i_obj->context), \
|
|
FDFS_UPLOAD_BY_BUFF, false);
|
|
}
|
|
|
|
/*
|
|
string FastDFS::storage_upload_slave_by_filebuff1(string file_buff,
|
|
string master_file_id, string prefix_name [, string file_ext_name,
|
|
string meta_list, array tracker_server, array storage_server])
|
|
return file_id for success, false for error
|
|
*/
|
|
PHP_METHOD(FastDFS, storage_upload_slave_by_filebuff1)
|
|
{
|
|
zval *object = getThis();
|
|
php_fdfs_t *i_obj;
|
|
|
|
i_obj = (php_fdfs_t *) zend_object_store_get_object(object TSRMLS_CC);
|
|
php_fdfs_storage_upload_slave_file_impl( \
|
|
INTERNAL_FUNCTION_PARAM_PASSTHRU, &(i_obj->context), \
|
|
FDFS_UPLOAD_BY_BUFF, true);
|
|
}
|
|
|
|
/*
|
|
array FastDFS::storage_upload_slave_by_callback(array callback_array,
|
|
string group_name, string master_filename, string prefix_name
|
|
[, string file_ext_name, string meta_list,
|
|
array tracker_server, array storage_server])
|
|
return array for success, false for error
|
|
*/
|
|
PHP_METHOD(FastDFS, storage_upload_slave_by_callback)
|
|
{
|
|
zval *object = getThis();
|
|
php_fdfs_t *i_obj;
|
|
|
|
i_obj = (php_fdfs_t *) zend_object_store_get_object(object TSRMLS_CC);
|
|
php_fdfs_storage_upload_slave_file_impl( \
|
|
INTERNAL_FUNCTION_PARAM_PASSTHRU, &(i_obj->context), \
|
|
FDFS_UPLOAD_BY_CALLBACK, false);
|
|
}
|
|
|
|
/*
|
|
string FastDFS::storage_upload_slave_by_callback1(array callback_array,
|
|
string group_name, string master_filename, string prefix_name
|
|
[, string file_ext_name, string meta_list,
|
|
array tracker_server, array storage_server])
|
|
return file_id for success, false for error
|
|
*/
|
|
PHP_METHOD(FastDFS, storage_upload_slave_by_callback1)
|
|
{
|
|
zval *object = getThis();
|
|
php_fdfs_t *i_obj;
|
|
|
|
i_obj = (php_fdfs_t *) zend_object_store_get_object(object TSRMLS_CC);
|
|
php_fdfs_storage_upload_slave_file_impl( \
|
|
INTERNAL_FUNCTION_PARAM_PASSTHRU, &(i_obj->context), \
|
|
FDFS_UPLOAD_BY_CALLBACK, true);
|
|
}
|
|
|
|
/*
|
|
boolean FastDFS::storage_delete_file(string group_name, string remote_filename
|
|
[, array tracker_server, array storage_server])
|
|
return true for success, false for error
|
|
*/
|
|
PHP_METHOD(FastDFS, storage_delete_file)
|
|
{
|
|
zval *object = getThis();
|
|
php_fdfs_t *i_obj;
|
|
|
|
i_obj = (php_fdfs_t *) zend_object_store_get_object(object TSRMLS_CC);
|
|
php_fdfs_storage_delete_file_impl(INTERNAL_FUNCTION_PARAM_PASSTHRU, \
|
|
&(i_obj->context), false);
|
|
}
|
|
|
|
/*
|
|
boolean FastDFS::storage_delete_file1(string file_id
|
|
[, array tracker_server, array storage_server])
|
|
return true for success, false for error
|
|
*/
|
|
PHP_METHOD(FastDFS, storage_delete_file1)
|
|
{
|
|
zval *object = getThis();
|
|
php_fdfs_t *i_obj;
|
|
|
|
i_obj = (php_fdfs_t *) zend_object_store_get_object(object TSRMLS_CC);
|
|
php_fdfs_storage_delete_file_impl(INTERNAL_FUNCTION_PARAM_PASSTHRU, \
|
|
&(i_obj->context), true);
|
|
}
|
|
|
|
/*
|
|
boolean FastDFS::storage_truncate_file(string group_name,
|
|
string remote_filename [, long truncated_file_size = 0,
|
|
array tracker_server, array storage_server])
|
|
return true for success, false for error
|
|
*/
|
|
PHP_METHOD(FastDFS, storage_truncate_file)
|
|
{
|
|
zval *object = getThis();
|
|
php_fdfs_t *i_obj;
|
|
|
|
i_obj = (php_fdfs_t *) zend_object_store_get_object(object TSRMLS_CC);
|
|
php_fdfs_storage_truncate_file_impl(INTERNAL_FUNCTION_PARAM_PASSTHRU, \
|
|
&(i_obj->context), false);
|
|
}
|
|
|
|
/*
|
|
boolean FastDFS::storage_truncate_file1(string file_id
|
|
[, long truncated_file_size = 0, array tracker_server,
|
|
array storage_server])
|
|
return true for success, false for error
|
|
*/
|
|
PHP_METHOD(FastDFS, storage_truncate_file1)
|
|
{
|
|
zval *object = getThis();
|
|
php_fdfs_t *i_obj;
|
|
|
|
i_obj = (php_fdfs_t *) zend_object_store_get_object(object TSRMLS_CC);
|
|
php_fdfs_storage_truncate_file_impl(INTERNAL_FUNCTION_PARAM_PASSTHRU, \
|
|
&(i_obj->context), true);
|
|
}
|
|
|
|
/*
|
|
string FastDFS::storage_download_file_to_buff(string group_name,
|
|
string remote_filename [, long file_offset, long download_bytes,
|
|
array tracker_server, array storage_server])
|
|
return file content for success, false for error
|
|
*/
|
|
PHP_METHOD(FastDFS, storage_download_file_to_buff)
|
|
{
|
|
zval *object = getThis();
|
|
php_fdfs_t *i_obj;
|
|
|
|
i_obj = (php_fdfs_t *) zend_object_store_get_object(object TSRMLS_CC);
|
|
php_fdfs_storage_download_file_to_buff_impl( \
|
|
INTERNAL_FUNCTION_PARAM_PASSTHRU, &(i_obj->context), false);
|
|
}
|
|
|
|
/*
|
|
string FastDFS::storage_download_file_to_buff1(string file_id
|
|
[, long file_offset, long download_bytes,
|
|
array tracker_server, array storage_server])
|
|
return file content for success, false for error
|
|
*/
|
|
PHP_METHOD(FastDFS, storage_download_file_to_buff1)
|
|
{
|
|
zval *object = getThis();
|
|
php_fdfs_t *i_obj;
|
|
|
|
i_obj = (php_fdfs_t *) zend_object_store_get_object(object TSRMLS_CC);
|
|
php_fdfs_storage_download_file_to_buff_impl( \
|
|
INTERNAL_FUNCTION_PARAM_PASSTHRU, &(i_obj->context), true);
|
|
}
|
|
|
|
/*
|
|
boolean FastDFS::storage_download_file_to_callback(string group_name,
|
|
string remote_filename, array download_callback [, long file_offset,
|
|
long download_bytes, array tracker_server, array storage_server])
|
|
return true for success, false for error
|
|
*/
|
|
PHP_METHOD(FastDFS, storage_download_file_to_callback)
|
|
{
|
|
zval *object = getThis();
|
|
php_fdfs_t *i_obj;
|
|
|
|
i_obj = (php_fdfs_t *) zend_object_store_get_object(object TSRMLS_CC);
|
|
php_fdfs_storage_download_file_to_callback_impl( \
|
|
INTERNAL_FUNCTION_PARAM_PASSTHRU, &(i_obj->context), false);
|
|
}
|
|
|
|
/*
|
|
boolean FastDFS::storage_download_file_to_callback1(string file_id,
|
|
array download_callback [, long file_offset, long download_bytes,
|
|
array tracker_server, array storage_server])
|
|
return true for success, false for error
|
|
*/
|
|
PHP_METHOD(FastDFS, storage_download_file_to_callback1)
|
|
{
|
|
zval *object = getThis();
|
|
php_fdfs_t *i_obj;
|
|
|
|
i_obj = (php_fdfs_t *) zend_object_store_get_object(object TSRMLS_CC);
|
|
php_fdfs_storage_download_file_to_callback_impl( \
|
|
INTERNAL_FUNCTION_PARAM_PASSTHRU, &(i_obj->context), true);
|
|
}
|
|
|
|
/*
|
|
boolean FastDFS::storage_download_file_to_file(string group_name,
|
|
string remote_filename, string local_filename
|
|
[, long file_offset, long download_bytes,
|
|
array tracker_server, array storage_server])
|
|
return true for success, false for error
|
|
*/
|
|
PHP_METHOD(FastDFS, storage_download_file_to_file)
|
|
{
|
|
zval *object = getThis();
|
|
php_fdfs_t *i_obj;
|
|
|
|
i_obj = (php_fdfs_t *) zend_object_store_get_object(object TSRMLS_CC);
|
|
php_fdfs_storage_download_file_to_file_impl( \
|
|
INTERNAL_FUNCTION_PARAM_PASSTHRU, &(i_obj->context), false);
|
|
}
|
|
|
|
/*
|
|
boolean FastDFS::storage_download_file_to_file1(string file_id,
|
|
string local_filename, [, long file_offset, long download_bytes,
|
|
array tracker_server, array storage_server])
|
|
return true for success, false for error
|
|
*/
|
|
PHP_METHOD(FastDFS, storage_download_file_to_file1)
|
|
{
|
|
zval *object = getThis();
|
|
php_fdfs_t *i_obj;
|
|
|
|
i_obj = (php_fdfs_t *) zend_object_store_get_object(object TSRMLS_CC);
|
|
php_fdfs_storage_download_file_to_file_impl( \
|
|
INTERNAL_FUNCTION_PARAM_PASSTHRU, &(i_obj->context), true);
|
|
}
|
|
|
|
/*
|
|
boolean FastDFS::storage_set_metadata(string group_name, string remote_filename,
|
|
array meta_list [, string op_type, array tracker_server,
|
|
array storage_server])
|
|
return true for success, false for error
|
|
*/
|
|
PHP_METHOD(FastDFS, storage_set_metadata)
|
|
{
|
|
zval *object = getThis();
|
|
php_fdfs_t *i_obj;
|
|
|
|
i_obj = (php_fdfs_t *) zend_object_store_get_object(object TSRMLS_CC);
|
|
php_fdfs_storage_set_metadata_impl( \
|
|
INTERNAL_FUNCTION_PARAM_PASSTHRU, &(i_obj->context), false);
|
|
}
|
|
|
|
/*
|
|
boolean FastDFS::storage_set_metadata1(string file_id,
|
|
array meta_list [, string op_type, array tracker_server,
|
|
array storage_server])
|
|
return true for success, false for error
|
|
*/
|
|
PHP_METHOD(FastDFS, storage_set_metadata1)
|
|
{
|
|
zval *object = getThis();
|
|
php_fdfs_t *i_obj;
|
|
|
|
i_obj = (php_fdfs_t *) zend_object_store_get_object(object TSRMLS_CC);
|
|
php_fdfs_storage_set_metadata_impl( \
|
|
INTERNAL_FUNCTION_PARAM_PASSTHRU, &(i_obj->context), true);
|
|
}
|
|
|
|
/*
|
|
array FastDFS::storage_get_metadata(string group_name, string remote_filename
|
|
[, array tracker_server, array storage_server])
|
|
return array for success, false for error
|
|
*/
|
|
PHP_METHOD(FastDFS, storage_get_metadata)
|
|
{
|
|
zval *object = getThis();
|
|
php_fdfs_t *i_obj;
|
|
|
|
i_obj = (php_fdfs_t *) zend_object_store_get_object(object TSRMLS_CC);
|
|
php_fdfs_storage_get_metadata_impl( \
|
|
INTERNAL_FUNCTION_PARAM_PASSTHRU, &(i_obj->context), false);
|
|
}
|
|
|
|
/*
|
|
array FastDFS::storage_get_metadata1(string file_id
|
|
[, array tracker_server, array storage_server])
|
|
return array for success, false for error
|
|
*/
|
|
PHP_METHOD(FastDFS, storage_get_metadata1)
|
|
{
|
|
zval *object = getThis();
|
|
php_fdfs_t *i_obj;
|
|
|
|
i_obj = (php_fdfs_t *) zend_object_store_get_object(object TSRMLS_CC);
|
|
php_fdfs_storage_get_metadata_impl( \
|
|
INTERNAL_FUNCTION_PARAM_PASSTHRU, &(i_obj->context), true);
|
|
}
|
|
|
|
/*
|
|
boolean FastDFS::storage_file_exist(string group_name, string remote_filename
|
|
[, array tracker_server, array storage_server])
|
|
return true for exist, false for not exist
|
|
*/
|
|
PHP_METHOD(FastDFS, storage_file_exist)
|
|
{
|
|
zval *object = getThis();
|
|
php_fdfs_t *i_obj;
|
|
|
|
i_obj = (php_fdfs_t *) zend_object_store_get_object(object TSRMLS_CC);
|
|
php_fdfs_storage_file_exist_impl( \
|
|
INTERNAL_FUNCTION_PARAM_PASSTHRU, &(i_obj->context), false);
|
|
}
|
|
|
|
/*
|
|
boolean FastDFS::storage_file_exist1(string file_id
|
|
[, array tracker_server, array storage_server])
|
|
return true for exist, false for not exist
|
|
*/
|
|
PHP_METHOD(FastDFS, storage_file_exist1)
|
|
{
|
|
zval *object = getThis();
|
|
php_fdfs_t *i_obj;
|
|
|
|
i_obj = (php_fdfs_t *) zend_object_store_get_object(object TSRMLS_CC);
|
|
php_fdfs_storage_file_exist_impl( \
|
|
INTERNAL_FUNCTION_PARAM_PASSTHRU, &(i_obj->context), true);
|
|
}
|
|
|
|
/*
|
|
long FastDFS::get_last_error_no()
|
|
return last error no
|
|
*/
|
|
PHP_METHOD(FastDFS, get_last_error_no)
|
|
{
|
|
zval *object = getThis();
|
|
php_fdfs_t *i_obj;
|
|
|
|
i_obj = (php_fdfs_t *) zend_object_store_get_object(object TSRMLS_CC);
|
|
RETURN_LONG(i_obj->context.err_no);
|
|
}
|
|
|
|
/*
|
|
string FastDFS::get_last_error_info()
|
|
return last error info
|
|
*/
|
|
PHP_METHOD(FastDFS, get_last_error_info)
|
|
{
|
|
char *error_info;
|
|
zval *object = getThis();
|
|
php_fdfs_t *i_obj;
|
|
|
|
i_obj = (php_fdfs_t *) zend_object_store_get_object(object TSRMLS_CC);
|
|
error_info = STRERROR(i_obj->context.err_no);
|
|
RETURN_STRINGL(error_info, strlen(error_info), 1);
|
|
}
|
|
|
|
/*
|
|
string FastDFS::http_gen_token(string file_id, int timestamp)
|
|
return token string for success, false for error
|
|
*/
|
|
PHP_METHOD(FastDFS, http_gen_token)
|
|
{
|
|
zval *object = getThis();
|
|
php_fdfs_t *i_obj;
|
|
|
|
i_obj = (php_fdfs_t *) zend_object_store_get_object(object TSRMLS_CC);
|
|
php_fdfs_http_gen_token_impl( \
|
|
INTERNAL_FUNCTION_PARAM_PASSTHRU, &(i_obj->context));
|
|
}
|
|
|
|
/*
|
|
array FastDFS::get_file_info(string group_name, string remote_filename)
|
|
return array for success, false for error
|
|
*/
|
|
PHP_METHOD(FastDFS, get_file_info)
|
|
{
|
|
zval *object = getThis();
|
|
php_fdfs_t *i_obj;
|
|
|
|
i_obj = (php_fdfs_t *) zend_object_store_get_object(object TSRMLS_CC);
|
|
php_fdfs_get_file_info_impl( \
|
|
INTERNAL_FUNCTION_PARAM_PASSTHRU, &(i_obj->context), false);
|
|
}
|
|
|
|
/*
|
|
array FastDFS::get_file_info1(string file_id)
|
|
return array for success, false for error
|
|
*/
|
|
PHP_METHOD(FastDFS, get_file_info1)
|
|
{
|
|
zval *object = getThis();
|
|
php_fdfs_t *i_obj;
|
|
|
|
i_obj = (php_fdfs_t *) zend_object_store_get_object(object TSRMLS_CC);
|
|
php_fdfs_get_file_info_impl( \
|
|
INTERNAL_FUNCTION_PARAM_PASSTHRU, &(i_obj->context), true);
|
|
}
|
|
|
|
/*
|
|
bool FastDFS::send_data(int sock, string buff)
|
|
return true for success, false for error
|
|
*/
|
|
PHP_METHOD(FastDFS, send_data)
|
|
{
|
|
zval *object = getThis();
|
|
php_fdfs_t *i_obj;
|
|
|
|
i_obj = (php_fdfs_t *) zend_object_store_get_object(object TSRMLS_CC);
|
|
php_fdfs_send_data_impl( \
|
|
INTERNAL_FUNCTION_PARAM_PASSTHRU, &(i_obj->context));
|
|
}
|
|
|
|
/*
|
|
string FastDFS::gen_slave_filename(string master_filename, string prefix_name
|
|
[, string file_ext_name])
|
|
return slave filename string for success, false for error
|
|
*/
|
|
PHP_METHOD(FastDFS, gen_slave_filename)
|
|
{
|
|
zval *object = getThis();
|
|
php_fdfs_t *i_obj;
|
|
|
|
i_obj = (php_fdfs_t *) zend_object_store_get_object(object TSRMLS_CC);
|
|
php_fdfs_gen_slave_filename_impl( \
|
|
INTERNAL_FUNCTION_PARAM_PASSTHRU, &(i_obj->context));
|
|
}
|
|
|
|
/*
|
|
void FastDFS::close()
|
|
*/
|
|
PHP_METHOD(FastDFS, close)
|
|
{
|
|
zval *object = getThis();
|
|
php_fdfs_t *i_obj;
|
|
|
|
i_obj = (php_fdfs_t *) zend_object_store_get_object(object TSRMLS_CC);
|
|
php_fdfs_close(i_obj TSRMLS_CC);
|
|
}
|
|
|
|
ZEND_BEGIN_ARG_INFO_EX(arginfo___construct, 0, 0, 0)
|
|
ZEND_END_ARG_INFO()
|
|
|
|
ZEND_BEGIN_ARG_INFO_EX(arginfo_tracker_get_connection, 0, 0, 0)
|
|
ZEND_END_ARG_INFO()
|
|
|
|
ZEND_BEGIN_ARG_INFO_EX(arginfo_tracker_make_all_connections, 0, 0, 0)
|
|
ZEND_END_ARG_INFO()
|
|
|
|
ZEND_BEGIN_ARG_INFO_EX(arginfo_tracker_close_all_connections, 0, 0, 0)
|
|
ZEND_END_ARG_INFO()
|
|
|
|
ZEND_BEGIN_ARG_INFO_EX(arginfo_connect_server, 0, 0, 2)
|
|
ZEND_ARG_INFO(0, ip_addr)
|
|
ZEND_ARG_INFO(0, port)
|
|
ZEND_END_ARG_INFO()
|
|
|
|
ZEND_BEGIN_ARG_INFO_EX(arginfo_disconnect_server, 0, 0, 1)
|
|
ZEND_ARG_INFO(0, server_info)
|
|
ZEND_END_ARG_INFO()
|
|
|
|
ZEND_BEGIN_ARG_INFO_EX(arginfo_active_test, 0, 0, 1)
|
|
ZEND_ARG_INFO(0, server_info)
|
|
ZEND_END_ARG_INFO()
|
|
|
|
ZEND_BEGIN_ARG_INFO_EX(arginfo_tracker_list_groups, 0, 0, 0)
|
|
ZEND_ARG_INFO(0, group_name)
|
|
ZEND_ARG_INFO(0, tracker_server)
|
|
ZEND_END_ARG_INFO()
|
|
|
|
ZEND_BEGIN_ARG_INFO_EX(arginfo_tracker_query_storage_store, 0, 0, 0)
|
|
ZEND_ARG_INFO(0, group_name)
|
|
ZEND_ARG_INFO(0, tracker_server)
|
|
ZEND_END_ARG_INFO()
|
|
|
|
ZEND_BEGIN_ARG_INFO_EX(arginfo_tracker_query_storage_store_list, 0, 0, 0)
|
|
ZEND_ARG_INFO(0, group_name)
|
|
ZEND_ARG_INFO(0, tracker_server)
|
|
ZEND_END_ARG_INFO()
|
|
|
|
ZEND_BEGIN_ARG_INFO_EX(arginfo_tracker_query_storage_update, 0, 0, 2)
|
|
ZEND_ARG_INFO(0, group_name)
|
|
ZEND_ARG_INFO(0, remote_filename)
|
|
ZEND_ARG_INFO(0, tracker_server)
|
|
ZEND_END_ARG_INFO()
|
|
|
|
ZEND_BEGIN_ARG_INFO_EX(arginfo_tracker_query_storage_fetch, 0, 0, 2)
|
|
ZEND_ARG_INFO(0, group_name)
|
|
ZEND_ARG_INFO(0, remote_filename)
|
|
ZEND_ARG_INFO(0, tracker_server)
|
|
ZEND_END_ARG_INFO()
|
|
|
|
ZEND_BEGIN_ARG_INFO_EX(arginfo_tracker_query_storage_list, 0, 0, 2)
|
|
ZEND_ARG_INFO(0, group_name)
|
|
ZEND_ARG_INFO(0, remote_filename)
|
|
ZEND_ARG_INFO(0, tracker_server)
|
|
ZEND_END_ARG_INFO()
|
|
|
|
ZEND_BEGIN_ARG_INFO_EX(arginfo_tracker_query_storage_update1, 0, 0, 1)
|
|
ZEND_ARG_INFO(0, file_id)
|
|
ZEND_ARG_INFO(0, tracker_server)
|
|
ZEND_END_ARG_INFO()
|
|
|
|
ZEND_BEGIN_ARG_INFO_EX(arginfo_tracker_query_storage_fetch1, 0, 0, 1)
|
|
ZEND_ARG_INFO(0, file_id)
|
|
ZEND_ARG_INFO(0, tracker_server)
|
|
ZEND_END_ARG_INFO()
|
|
|
|
ZEND_BEGIN_ARG_INFO_EX(arginfo_tracker_query_storage_list1, 0, 0, 1)
|
|
ZEND_ARG_INFO(0, file_id)
|
|
ZEND_ARG_INFO(0, tracker_server)
|
|
ZEND_END_ARG_INFO()
|
|
|
|
ZEND_BEGIN_ARG_INFO_EX(arginfo_tracker_delete_storage, 0, 0, 2)
|
|
ZEND_ARG_INFO(0, group_name)
|
|
ZEND_ARG_INFO(0, storage_ip)
|
|
ZEND_END_ARG_INFO()
|
|
|
|
ZEND_BEGIN_ARG_INFO_EX(arginfo_storage_upload_by_filename, 0, 0, 1)
|
|
ZEND_ARG_INFO(0, local_filename)
|
|
ZEND_ARG_INFO(0, file_ext_name)
|
|
ZEND_ARG_INFO(0, meta_list)
|
|
ZEND_ARG_INFO(0, group_name)
|
|
ZEND_ARG_INFO(0, tracker_server)
|
|
ZEND_ARG_INFO(0, storage_server)
|
|
ZEND_END_ARG_INFO()
|
|
|
|
ZEND_BEGIN_ARG_INFO_EX(arginfo_storage_upload_by_filename1, 0, 0, 1)
|
|
ZEND_ARG_INFO(0, local_filename)
|
|
ZEND_ARG_INFO(0, file_ext_name)
|
|
ZEND_ARG_INFO(0, meta_list)
|
|
ZEND_ARG_INFO(0, group_name)
|
|
ZEND_ARG_INFO(0, tracker_server)
|
|
ZEND_ARG_INFO(0, storage_server)
|
|
ZEND_END_ARG_INFO()
|
|
|
|
ZEND_BEGIN_ARG_INFO_EX(arginfo_storage_upload_by_filebuff, 0, 0, 1)
|
|
ZEND_ARG_INFO(0, file_buff)
|
|
ZEND_ARG_INFO(0, file_ext_name)
|
|
ZEND_ARG_INFO(0, meta_list)
|
|
ZEND_ARG_INFO(0, group_name)
|
|
ZEND_ARG_INFO(0, tracker_server)
|
|
ZEND_ARG_INFO(0, storage_server)
|
|
ZEND_END_ARG_INFO()
|
|
|
|
ZEND_BEGIN_ARG_INFO_EX(arginfo_storage_upload_by_filebuff1, 0, 0, 1)
|
|
ZEND_ARG_INFO(0, file_buff)
|
|
ZEND_ARG_INFO(0, file_ext_name)
|
|
ZEND_ARG_INFO(0, meta_list)
|
|
ZEND_ARG_INFO(0, group_name)
|
|
ZEND_ARG_INFO(0, tracker_server)
|
|
ZEND_ARG_INFO(0, storage_server)
|
|
ZEND_END_ARG_INFO()
|
|
|
|
ZEND_BEGIN_ARG_INFO_EX(arginfo_storage_upload_by_callback, 0, 0, 1)
|
|
ZEND_ARG_INFO(0, callback_array)
|
|
ZEND_ARG_INFO(0, file_ext_name)
|
|
ZEND_ARG_INFO(0, meta_list)
|
|
ZEND_ARG_INFO(0, group_name)
|
|
ZEND_ARG_INFO(0, tracker_server)
|
|
ZEND_ARG_INFO(0, storage_server)
|
|
ZEND_END_ARG_INFO()
|
|
|
|
ZEND_BEGIN_ARG_INFO_EX(arginfo_storage_upload_by_callback1, 0, 0, 1)
|
|
ZEND_ARG_INFO(0, callback_array)
|
|
ZEND_ARG_INFO(0, file_ext_name)
|
|
ZEND_ARG_INFO(0, meta_list)
|
|
ZEND_ARG_INFO(0, group_name)
|
|
ZEND_ARG_INFO(0, tracker_server)
|
|
ZEND_ARG_INFO(0, storage_server)
|
|
ZEND_END_ARG_INFO()
|
|
|
|
ZEND_BEGIN_ARG_INFO_EX(arginfo_storage_append_by_filename, 0, 0, 3)
|
|
ZEND_ARG_INFO(0, local_filename)
|
|
ZEND_ARG_INFO(0, group_name)
|
|
ZEND_ARG_INFO(0, appender_filename)
|
|
ZEND_ARG_INFO(0, tracker_server)
|
|
ZEND_ARG_INFO(0, storage_server)
|
|
ZEND_END_ARG_INFO()
|
|
|
|
ZEND_BEGIN_ARG_INFO_EX(arginfo_storage_append_by_filename1, 0, 0, 2)
|
|
ZEND_ARG_INFO(0, local_filename)
|
|
ZEND_ARG_INFO(0, appender_file_id)
|
|
ZEND_ARG_INFO(0, tracker_server)
|
|
ZEND_ARG_INFO(0, storage_server)
|
|
ZEND_END_ARG_INFO()
|
|
|
|
ZEND_BEGIN_ARG_INFO_EX(arginfo_storage_append_by_filebuff, 0, 0, 3)
|
|
ZEND_ARG_INFO(0, file_buff)
|
|
ZEND_ARG_INFO(0, group_name)
|
|
ZEND_ARG_INFO(0, appender_filename)
|
|
ZEND_ARG_INFO(0, tracker_server)
|
|
ZEND_ARG_INFO(0, storage_server)
|
|
ZEND_END_ARG_INFO()
|
|
|
|
ZEND_BEGIN_ARG_INFO_EX(arginfo_storage_append_by_filebuff1, 0, 0, 2)
|
|
ZEND_ARG_INFO(0, file_buff)
|
|
ZEND_ARG_INFO(0, appender_file_id)
|
|
ZEND_ARG_INFO(0, tracker_server)
|
|
ZEND_ARG_INFO(0, storage_server)
|
|
ZEND_END_ARG_INFO()
|
|
|
|
ZEND_BEGIN_ARG_INFO_EX(arginfo_storage_append_by_callback, 0, 0, 3)
|
|
ZEND_ARG_INFO(0, callback_array)
|
|
ZEND_ARG_INFO(0, group_name)
|
|
ZEND_ARG_INFO(0, appender_filename)
|
|
ZEND_ARG_INFO(0, tracker_server)
|
|
ZEND_ARG_INFO(0, storage_server)
|
|
ZEND_END_ARG_INFO()
|
|
|
|
ZEND_BEGIN_ARG_INFO_EX(arginfo_storage_append_by_callback1, 0, 0, 2)
|
|
ZEND_ARG_INFO(0, callback_array)
|
|
ZEND_ARG_INFO(0, appender_file_id)
|
|
ZEND_ARG_INFO(0, tracker_server)
|
|
ZEND_ARG_INFO(0, storage_server)
|
|
ZEND_END_ARG_INFO()
|
|
|
|
ZEND_BEGIN_ARG_INFO_EX(arginfo_storage_modify_by_filename, 0, 0, 3)
|
|
ZEND_ARG_INFO(0, local_filename)
|
|
ZEND_ARG_INFO(0, group_name)
|
|
ZEND_ARG_INFO(0, appender_filename)
|
|
ZEND_ARG_INFO(0, tracker_server)
|
|
ZEND_ARG_INFO(0, storage_server)
|
|
ZEND_END_ARG_INFO()
|
|
|
|
ZEND_BEGIN_ARG_INFO_EX(arginfo_storage_modify_by_filename1, 0, 0, 2)
|
|
ZEND_ARG_INFO(0, local_filename)
|
|
ZEND_ARG_INFO(0, appender_file_id)
|
|
ZEND_ARG_INFO(0, tracker_server)
|
|
ZEND_ARG_INFO(0, storage_server)
|
|
ZEND_END_ARG_INFO()
|
|
|
|
ZEND_BEGIN_ARG_INFO_EX(arginfo_storage_modify_by_filebuff, 0, 0, 3)
|
|
ZEND_ARG_INFO(0, file_buff)
|
|
ZEND_ARG_INFO(0, group_name)
|
|
ZEND_ARG_INFO(0, appender_filename)
|
|
ZEND_ARG_INFO(0, tracker_server)
|
|
ZEND_ARG_INFO(0, storage_server)
|
|
ZEND_END_ARG_INFO()
|
|
|
|
ZEND_BEGIN_ARG_INFO_EX(arginfo_storage_modify_by_filebuff1, 0, 0, 2)
|
|
ZEND_ARG_INFO(0, file_buff)
|
|
ZEND_ARG_INFO(0, appender_file_id)
|
|
ZEND_ARG_INFO(0, tracker_server)
|
|
ZEND_ARG_INFO(0, storage_server)
|
|
ZEND_END_ARG_INFO()
|
|
|
|
ZEND_BEGIN_ARG_INFO_EX(arginfo_storage_modify_by_callback, 0, 0, 3)
|
|
ZEND_ARG_INFO(0, callback_array)
|
|
ZEND_ARG_INFO(0, group_name)
|
|
ZEND_ARG_INFO(0, appender_filename)
|
|
ZEND_ARG_INFO(0, tracker_server)
|
|
ZEND_ARG_INFO(0, storage_server)
|
|
ZEND_END_ARG_INFO()
|
|
|
|
ZEND_BEGIN_ARG_INFO_EX(arginfo_storage_modify_by_callback1, 0, 0, 2)
|
|
ZEND_ARG_INFO(0, callback_array)
|
|
ZEND_ARG_INFO(0, appender_file_id)
|
|
ZEND_ARG_INFO(0, tracker_server)
|
|
ZEND_ARG_INFO(0, storage_server)
|
|
ZEND_END_ARG_INFO()
|
|
|
|
ZEND_BEGIN_ARG_INFO_EX(arginfo_storage_upload_appender_by_filename, 0, 0, 1)
|
|
ZEND_ARG_INFO(0, local_filename)
|
|
ZEND_ARG_INFO(0, file_ext_name)
|
|
ZEND_ARG_INFO(0, meta_list)
|
|
ZEND_ARG_INFO(0, group_name)
|
|
ZEND_ARG_INFO(0, tracker_server)
|
|
ZEND_ARG_INFO(0, storage_server)
|
|
ZEND_END_ARG_INFO()
|
|
|
|
ZEND_BEGIN_ARG_INFO_EX(arginfo_storage_upload_appender_by_filename1, 0, 0, 1)
|
|
ZEND_ARG_INFO(0, local_filename)
|
|
ZEND_ARG_INFO(0, file_ext_name)
|
|
ZEND_ARG_INFO(0, meta_list)
|
|
ZEND_ARG_INFO(0, group_name)
|
|
ZEND_ARG_INFO(0, tracker_server)
|
|
ZEND_ARG_INFO(0, storage_server)
|
|
ZEND_END_ARG_INFO()
|
|
|
|
ZEND_BEGIN_ARG_INFO_EX(arginfo_storage_upload_appender_by_filebuff, 0, 0, 1)
|
|
ZEND_ARG_INFO(0, file_buff)
|
|
ZEND_ARG_INFO(0, file_ext_name)
|
|
ZEND_ARG_INFO(0, meta_list)
|
|
ZEND_ARG_INFO(0, group_name)
|
|
ZEND_ARG_INFO(0, tracker_server)
|
|
ZEND_ARG_INFO(0, storage_server)
|
|
ZEND_END_ARG_INFO()
|
|
|
|
ZEND_BEGIN_ARG_INFO_EX(arginfo_storage_upload_appender_by_filebuff1, 0, 0, 1)
|
|
ZEND_ARG_INFO(0, file_buff)
|
|
ZEND_ARG_INFO(0, file_ext_name)
|
|
ZEND_ARG_INFO(0, meta_list)
|
|
ZEND_ARG_INFO(0, group_name)
|
|
ZEND_ARG_INFO(0, tracker_server)
|
|
ZEND_ARG_INFO(0, storage_server)
|
|
ZEND_END_ARG_INFO()
|
|
|
|
ZEND_BEGIN_ARG_INFO_EX(arginfo_storage_upload_appender_by_callback, 0, 0, 1)
|
|
ZEND_ARG_INFO(0, callback_array)
|
|
ZEND_ARG_INFO(0, file_ext_name)
|
|
ZEND_ARG_INFO(0, meta_list)
|
|
ZEND_ARG_INFO(0, group_name)
|
|
ZEND_ARG_INFO(0, tracker_server)
|
|
ZEND_ARG_INFO(0, storage_server)
|
|
ZEND_END_ARG_INFO()
|
|
|
|
ZEND_BEGIN_ARG_INFO_EX(arginfo_storage_upload_appender_by_callback1, 0, 0, 1)
|
|
ZEND_ARG_INFO(0, callback_array)
|
|
ZEND_ARG_INFO(0, file_ext_name)
|
|
ZEND_ARG_INFO(0, meta_list)
|
|
ZEND_ARG_INFO(0, group_name)
|
|
ZEND_ARG_INFO(0, tracker_server)
|
|
ZEND_ARG_INFO(0, storage_server)
|
|
ZEND_END_ARG_INFO()
|
|
|
|
ZEND_BEGIN_ARG_INFO_EX(arginfo_storage_upload_slave_by_filename, 0, 0, 4)
|
|
ZEND_ARG_INFO(0, local_filename)
|
|
ZEND_ARG_INFO(0, group_name)
|
|
ZEND_ARG_INFO(0, master_filename)
|
|
ZEND_ARG_INFO(0, prefix_name)
|
|
ZEND_ARG_INFO(0, file_ext_name)
|
|
ZEND_ARG_INFO(0, meta_list)
|
|
ZEND_ARG_INFO(0, tracker_server)
|
|
ZEND_ARG_INFO(0, storage_server)
|
|
ZEND_END_ARG_INFO()
|
|
|
|
ZEND_BEGIN_ARG_INFO_EX(arginfo_storage_upload_slave_by_filename1, 0, 0, 3)
|
|
ZEND_ARG_INFO(0, local_filename)
|
|
ZEND_ARG_INFO(0, master_file_id)
|
|
ZEND_ARG_INFO(0, prefix_name)
|
|
ZEND_ARG_INFO(0, file_ext_name)
|
|
ZEND_ARG_INFO(0, meta_list)
|
|
ZEND_ARG_INFO(0, tracker_server)
|
|
ZEND_ARG_INFO(0, storage_server)
|
|
ZEND_END_ARG_INFO()
|
|
|
|
ZEND_BEGIN_ARG_INFO_EX(arginfo_storage_upload_slave_by_filebuff, 0, 0, 4)
|
|
ZEND_ARG_INFO(0, file_buff)
|
|
ZEND_ARG_INFO(0, group_name)
|
|
ZEND_ARG_INFO(0, master_filename)
|
|
ZEND_ARG_INFO(0, prefix_name)
|
|
ZEND_ARG_INFO(0, file_ext_name)
|
|
ZEND_ARG_INFO(0, meta_list)
|
|
ZEND_ARG_INFO(0, tracker_server)
|
|
ZEND_ARG_INFO(0, storage_server)
|
|
ZEND_END_ARG_INFO()
|
|
|
|
ZEND_BEGIN_ARG_INFO_EX(arginfo_storage_upload_slave_by_filebuff1, 0, 0, 3)
|
|
ZEND_ARG_INFO(0, file_buff)
|
|
ZEND_ARG_INFO(0, master_file_id)
|
|
ZEND_ARG_INFO(0, prefix_name)
|
|
ZEND_ARG_INFO(0, file_ext_name)
|
|
ZEND_ARG_INFO(0, meta_list)
|
|
ZEND_ARG_INFO(0, tracker_server)
|
|
ZEND_ARG_INFO(0, storage_server)
|
|
ZEND_END_ARG_INFO()
|
|
|
|
ZEND_BEGIN_ARG_INFO_EX(arginfo_storage_upload_slave_by_callback, 0, 0, 4)
|
|
ZEND_ARG_INFO(0, callback_array)
|
|
ZEND_ARG_INFO(0, group_name)
|
|
ZEND_ARG_INFO(0, master_filename)
|
|
ZEND_ARG_INFO(0, prefix_name)
|
|
ZEND_ARG_INFO(0, file_ext_name)
|
|
ZEND_ARG_INFO(0, meta_list)
|
|
ZEND_ARG_INFO(0, tracker_server)
|
|
ZEND_ARG_INFO(0, storage_server)
|
|
ZEND_END_ARG_INFO()
|
|
|
|
ZEND_BEGIN_ARG_INFO_EX(arginfo_storage_upload_slave_by_callback1, 0, 0, 3)
|
|
ZEND_ARG_INFO(0, callback_array)
|
|
ZEND_ARG_INFO(0, master_file_id)
|
|
ZEND_ARG_INFO(0, prefix_name)
|
|
ZEND_ARG_INFO(0, file_ext_name)
|
|
ZEND_ARG_INFO(0, meta_list)
|
|
ZEND_ARG_INFO(0, tracker_server)
|
|
ZEND_ARG_INFO(0, storage_server)
|
|
ZEND_END_ARG_INFO()
|
|
|
|
ZEND_BEGIN_ARG_INFO_EX(arginfo_storage_delete_file, 0, 0, 2)
|
|
ZEND_ARG_INFO(0, group_name)
|
|
ZEND_ARG_INFO(0, remote_filename)
|
|
ZEND_ARG_INFO(0, tracker_server)
|
|
ZEND_ARG_INFO(0, storage_server)
|
|
ZEND_END_ARG_INFO()
|
|
|
|
ZEND_BEGIN_ARG_INFO_EX(arginfo_storage_delete_file1, 0, 0, 1)
|
|
ZEND_ARG_INFO(0, file_id)
|
|
ZEND_ARG_INFO(0, tracker_server)
|
|
ZEND_ARG_INFO(0, storage_server)
|
|
ZEND_END_ARG_INFO()
|
|
|
|
ZEND_BEGIN_ARG_INFO_EX(arginfo_storage_truncate_file, 0, 0, 2)
|
|
ZEND_ARG_INFO(0, group_name)
|
|
ZEND_ARG_INFO(0, remote_filename)
|
|
ZEND_ARG_INFO(0, truncated_file_size)
|
|
ZEND_ARG_INFO(0, tracker_server)
|
|
ZEND_ARG_INFO(0, storage_server)
|
|
ZEND_END_ARG_INFO()
|
|
|
|
ZEND_BEGIN_ARG_INFO_EX(arginfo_storage_truncate_file1, 0, 0, 1)
|
|
ZEND_ARG_INFO(0, file_id)
|
|
ZEND_ARG_INFO(0, truncated_file_size)
|
|
ZEND_ARG_INFO(0, tracker_server)
|
|
ZEND_ARG_INFO(0, storage_server)
|
|
ZEND_END_ARG_INFO()
|
|
|
|
ZEND_BEGIN_ARG_INFO_EX(arginfo_storage_download_file_to_buff, 0, 0, 2)
|
|
ZEND_ARG_INFO(0, group_name)
|
|
ZEND_ARG_INFO(0, remote_filename)
|
|
ZEND_ARG_INFO(0, file_offset)
|
|
ZEND_ARG_INFO(0, download_bytes)
|
|
ZEND_ARG_INFO(0, tracker_server)
|
|
ZEND_ARG_INFO(0, storage_server)
|
|
ZEND_END_ARG_INFO()
|
|
|
|
ZEND_BEGIN_ARG_INFO_EX(arginfo_storage_download_file_to_buff1, 0, 0, 1)
|
|
ZEND_ARG_INFO(0, file_id)
|
|
ZEND_ARG_INFO(0, file_offset)
|
|
ZEND_ARG_INFO(0, download_bytes)
|
|
ZEND_ARG_INFO(0, tracker_server)
|
|
ZEND_ARG_INFO(0, storage_server)
|
|
ZEND_END_ARG_INFO()
|
|
|
|
ZEND_BEGIN_ARG_INFO_EX(arginfo_storage_download_file_to_callback, 0, 0, 3)
|
|
ZEND_ARG_INFO(0, group_name)
|
|
ZEND_ARG_INFO(0, remote_filename)
|
|
ZEND_ARG_INFO(0, download_callback)
|
|
ZEND_ARG_INFO(0, file_offset)
|
|
ZEND_ARG_INFO(0, download_bytes)
|
|
ZEND_ARG_INFO(0, tracker_server)
|
|
ZEND_ARG_INFO(0, storage_server)
|
|
ZEND_END_ARG_INFO()
|
|
|
|
ZEND_BEGIN_ARG_INFO_EX(arginfo_storage_download_file_to_callback1, 0, 0, 2)
|
|
ZEND_ARG_INFO(0, file_id)
|
|
ZEND_ARG_INFO(0, download_callback)
|
|
ZEND_ARG_INFO(0, file_offset)
|
|
ZEND_ARG_INFO(0, download_bytes)
|
|
ZEND_ARG_INFO(0, tracker_server)
|
|
ZEND_ARG_INFO(0, storage_server)
|
|
ZEND_END_ARG_INFO()
|
|
|
|
ZEND_BEGIN_ARG_INFO_EX(arginfo_storage_download_file_to_file, 0, 0, 3)
|
|
ZEND_ARG_INFO(0, group_name)
|
|
ZEND_ARG_INFO(0, remote_filename)
|
|
ZEND_ARG_INFO(0, local_filename)
|
|
ZEND_ARG_INFO(0, file_offset)
|
|
ZEND_ARG_INFO(0, download_bytes)
|
|
ZEND_ARG_INFO(0, tracker_server)
|
|
ZEND_ARG_INFO(0, storage_server)
|
|
ZEND_END_ARG_INFO()
|
|
|
|
ZEND_BEGIN_ARG_INFO_EX(arginfo_storage_download_file_to_file1, 0, 0, 2)
|
|
ZEND_ARG_INFO(0, file_id)
|
|
ZEND_ARG_INFO(0, local_filename)
|
|
ZEND_ARG_INFO(0, file_offset)
|
|
ZEND_ARG_INFO(0, download_bytes)
|
|
ZEND_ARG_INFO(0, tracker_server)
|
|
ZEND_ARG_INFO(0, storage_server)
|
|
ZEND_END_ARG_INFO()
|
|
|
|
ZEND_BEGIN_ARG_INFO_EX(arginfo_storage_set_metadata, 0, 0, 3)
|
|
ZEND_ARG_INFO(0, group_name)
|
|
ZEND_ARG_INFO(0, remote_filename)
|
|
ZEND_ARG_INFO(0, meta_list)
|
|
ZEND_ARG_INFO(0, op_type)
|
|
ZEND_ARG_INFO(0, tracker_server)
|
|
ZEND_ARG_INFO(0, storage_server)
|
|
ZEND_END_ARG_INFO()
|
|
|
|
ZEND_BEGIN_ARG_INFO_EX(arginfo_storage_set_metadata1, 0, 0, 2)
|
|
ZEND_ARG_INFO(0, file_id)
|
|
ZEND_ARG_INFO(0, meta_list)
|
|
ZEND_ARG_INFO(0, op_type)
|
|
ZEND_ARG_INFO(0, tracker_server)
|
|
ZEND_ARG_INFO(0, storage_server)
|
|
ZEND_END_ARG_INFO()
|
|
|
|
ZEND_BEGIN_ARG_INFO_EX(arginfo_storage_get_metadata, 0, 0, 2)
|
|
ZEND_ARG_INFO(0, group_name)
|
|
ZEND_ARG_INFO(0, remote_filename)
|
|
ZEND_ARG_INFO(0, tracker_server)
|
|
ZEND_ARG_INFO(0, storage_server)
|
|
ZEND_END_ARG_INFO()
|
|
|
|
ZEND_BEGIN_ARG_INFO_EX(arginfo_storage_get_metadata1, 0, 0, 1)
|
|
ZEND_ARG_INFO(0, file_id)
|
|
ZEND_ARG_INFO(0, tracker_server)
|
|
ZEND_ARG_INFO(0, storage_server)
|
|
ZEND_END_ARG_INFO()
|
|
|
|
ZEND_BEGIN_ARG_INFO_EX(arginfo_storage_file_exist, 0, 0, 2)
|
|
ZEND_ARG_INFO(0, group_name)
|
|
ZEND_ARG_INFO(0, remote_filename)
|
|
ZEND_ARG_INFO(0, tracker_server)
|
|
ZEND_ARG_INFO(0, storage_server)
|
|
ZEND_END_ARG_INFO()
|
|
|
|
ZEND_BEGIN_ARG_INFO_EX(arginfo_storage_file_exist1, 0, 0, 1)
|
|
ZEND_ARG_INFO(0, file_id)
|
|
ZEND_ARG_INFO(0, tracker_server)
|
|
ZEND_ARG_INFO(0, storage_server)
|
|
ZEND_END_ARG_INFO()
|
|
|
|
ZEND_BEGIN_ARG_INFO_EX(arginfo_get_last_error_no, 0, 0, 0)
|
|
ZEND_END_ARG_INFO()
|
|
|
|
ZEND_BEGIN_ARG_INFO_EX(arginfo_get_last_error_info, 0, 0, 0)
|
|
ZEND_END_ARG_INFO()
|
|
|
|
ZEND_BEGIN_ARG_INFO_EX(arginfo_http_gen_token, 0, 0, 2)
|
|
ZEND_ARG_INFO(0, file_id)
|
|
ZEND_ARG_INFO(0, timestamp)
|
|
ZEND_END_ARG_INFO()
|
|
|
|
ZEND_BEGIN_ARG_INFO_EX(arginfo_get_file_info, 0, 0, 2)
|
|
ZEND_ARG_INFO(0, group_name)
|
|
ZEND_ARG_INFO(0, remote_filename)
|
|
ZEND_END_ARG_INFO()
|
|
|
|
ZEND_BEGIN_ARG_INFO_EX(arginfo_get_file_info1, 0, 0, 1)
|
|
ZEND_ARG_INFO(0, file_id)
|
|
ZEND_END_ARG_INFO()
|
|
|
|
ZEND_BEGIN_ARG_INFO_EX(arginfo_send_data, 0, 0, 2)
|
|
ZEND_ARG_INFO(0, sock)
|
|
ZEND_ARG_INFO(0, buff)
|
|
ZEND_END_ARG_INFO()
|
|
|
|
ZEND_BEGIN_ARG_INFO_EX(arginfo_gen_slave_filename, 0, 0, 2)
|
|
ZEND_ARG_INFO(0, master_filename)
|
|
ZEND_ARG_INFO(0, prefix_name)
|
|
ZEND_ARG_INFO(0, file_ext_name)
|
|
ZEND_END_ARG_INFO()
|
|
|
|
ZEND_BEGIN_ARG_INFO_EX(arginfo_close, 0, 0, 0)
|
|
ZEND_END_ARG_INFO()
|
|
|
|
/* {{{ fdfs_class_methods */
|
|
#define FDFS_ME(name, args) PHP_ME(FastDFS, name, args, ZEND_ACC_PUBLIC)
|
|
static zend_function_entry fdfs_class_methods[] = {
|
|
FDFS_ME(__construct, arginfo___construct)
|
|
FDFS_ME(tracker_get_connection, arginfo_tracker_get_connection)
|
|
FDFS_ME(tracker_make_all_connections, arginfo_tracker_make_all_connections)
|
|
FDFS_ME(tracker_close_all_connections,arginfo_tracker_close_all_connections)
|
|
FDFS_ME(active_test, arginfo_active_test)
|
|
FDFS_ME(connect_server, arginfo_connect_server)
|
|
FDFS_ME(disconnect_server, arginfo_disconnect_server)
|
|
FDFS_ME(tracker_list_groups, arginfo_tracker_list_groups)
|
|
FDFS_ME(tracker_query_storage_store, arginfo_tracker_query_storage_store)
|
|
FDFS_ME(tracker_query_storage_store_list, arginfo_tracker_query_storage_store_list)
|
|
FDFS_ME(tracker_query_storage_update, arginfo_tracker_query_storage_update)
|
|
FDFS_ME(tracker_query_storage_fetch, arginfo_tracker_query_storage_fetch)
|
|
FDFS_ME(tracker_query_storage_list, arginfo_tracker_query_storage_list)
|
|
FDFS_ME(tracker_query_storage_update1,arginfo_tracker_query_storage_update1)
|
|
FDFS_ME(tracker_query_storage_fetch1, arginfo_tracker_query_storage_fetch1)
|
|
FDFS_ME(tracker_query_storage_list1, arginfo_tracker_query_storage_list1)
|
|
FDFS_ME(tracker_delete_storage, arginfo_tracker_delete_storage)
|
|
FDFS_ME(storage_upload_by_filename, arginfo_storage_upload_by_filename)
|
|
FDFS_ME(storage_upload_by_filename1, arginfo_storage_upload_by_filename1)
|
|
FDFS_ME(storage_upload_by_filebuff, arginfo_storage_upload_by_filebuff)
|
|
FDFS_ME(storage_upload_by_filebuff1, arginfo_storage_upload_by_filebuff1)
|
|
FDFS_ME(storage_upload_by_callback, arginfo_storage_upload_by_callback)
|
|
FDFS_ME(storage_upload_by_callback1, arginfo_storage_upload_by_callback1)
|
|
FDFS_ME(storage_append_by_filename, arginfo_storage_append_by_filename)
|
|
FDFS_ME(storage_append_by_filename1, arginfo_storage_append_by_filename1)
|
|
FDFS_ME(storage_append_by_filebuff, arginfo_storage_append_by_filebuff)
|
|
FDFS_ME(storage_append_by_filebuff1, arginfo_storage_append_by_filebuff1)
|
|
FDFS_ME(storage_append_by_callback, arginfo_storage_append_by_callback)
|
|
FDFS_ME(storage_append_by_callback1, arginfo_storage_append_by_callback1)
|
|
FDFS_ME(storage_modify_by_filename, arginfo_storage_modify_by_filename)
|
|
FDFS_ME(storage_modify_by_filename1, arginfo_storage_modify_by_filename1)
|
|
FDFS_ME(storage_modify_by_filebuff, arginfo_storage_modify_by_filebuff)
|
|
FDFS_ME(storage_modify_by_filebuff1, arginfo_storage_modify_by_filebuff1)
|
|
FDFS_ME(storage_modify_by_callback, arginfo_storage_modify_by_callback)
|
|
FDFS_ME(storage_modify_by_callback1, arginfo_storage_modify_by_callback1)
|
|
FDFS_ME(storage_upload_appender_by_filename, arginfo_storage_upload_appender_by_filename)
|
|
FDFS_ME(storage_upload_appender_by_filename1, arginfo_storage_upload_appender_by_filename1)
|
|
FDFS_ME(storage_upload_appender_by_filebuff, arginfo_storage_upload_appender_by_filebuff)
|
|
FDFS_ME(storage_upload_appender_by_filebuff1, arginfo_storage_upload_appender_by_filebuff1)
|
|
FDFS_ME(storage_upload_appender_by_callback, arginfo_storage_upload_appender_by_callback)
|
|
FDFS_ME(storage_upload_appender_by_callback1, arginfo_storage_upload_appender_by_callback1)
|
|
FDFS_ME(storage_upload_slave_by_filename, arginfo_storage_upload_slave_by_filename)
|
|
FDFS_ME(storage_upload_slave_by_filename1, arginfo_storage_upload_slave_by_filename1)
|
|
FDFS_ME(storage_upload_slave_by_filebuff, arginfo_storage_upload_slave_by_filebuff)
|
|
FDFS_ME(storage_upload_slave_by_filebuff1, arginfo_storage_upload_slave_by_filebuff1)
|
|
FDFS_ME(storage_upload_slave_by_callback, arginfo_storage_upload_slave_by_callback)
|
|
FDFS_ME(storage_upload_slave_by_callback1, arginfo_storage_upload_slave_by_callback1)
|
|
FDFS_ME(storage_delete_file, arginfo_storage_delete_file)
|
|
FDFS_ME(storage_delete_file1, arginfo_storage_delete_file1)
|
|
FDFS_ME(storage_truncate_file, arginfo_storage_truncate_file)
|
|
FDFS_ME(storage_truncate_file1, arginfo_storage_truncate_file1)
|
|
FDFS_ME(storage_download_file_to_buff, arginfo_storage_download_file_to_buff)
|
|
FDFS_ME(storage_download_file_to_buff1,arginfo_storage_download_file_to_buff1)
|
|
FDFS_ME(storage_download_file_to_file, arginfo_storage_download_file_to_file)
|
|
FDFS_ME(storage_download_file_to_file1,arginfo_storage_download_file_to_file1)
|
|
FDFS_ME(storage_download_file_to_callback, arginfo_storage_download_file_to_callback)
|
|
FDFS_ME(storage_download_file_to_callback1, arginfo_storage_download_file_to_callback1)
|
|
FDFS_ME(storage_set_metadata, arginfo_storage_set_metadata)
|
|
FDFS_ME(storage_set_metadata1, arginfo_storage_set_metadata1)
|
|
FDFS_ME(storage_get_metadata, arginfo_storage_get_metadata)
|
|
FDFS_ME(storage_get_metadata1, arginfo_storage_get_metadata1)
|
|
FDFS_ME(storage_file_exist, arginfo_storage_file_exist)
|
|
FDFS_ME(storage_file_exist1, arginfo_storage_file_exist1)
|
|
FDFS_ME(get_last_error_no, arginfo_get_last_error_no)
|
|
FDFS_ME(get_last_error_info, arginfo_get_last_error_info)
|
|
FDFS_ME(http_gen_token, arginfo_http_gen_token)
|
|
FDFS_ME(get_file_info, arginfo_get_file_info)
|
|
FDFS_ME(get_file_info1, arginfo_get_file_info1)
|
|
FDFS_ME(send_data, arginfo_send_data)
|
|
FDFS_ME(gen_slave_filename, arginfo_gen_slave_filename)
|
|
FDFS_ME(close, arginfo_close)
|
|
{ NULL, NULL, NULL }
|
|
};
|
|
#undef FDFS_ME
|
|
/* }}} */
|
|
|
|
static void php_fdfs_free_storage(php_fdfs_t *i_obj TSRMLS_DC)
|
|
{
|
|
zend_object_std_dtor(&i_obj->zo TSRMLS_CC);
|
|
php_fdfs_destroy(i_obj TSRMLS_CC);
|
|
}
|
|
|
|
zend_object_value php_fdfs_new(zend_class_entry *ce TSRMLS_DC)
|
|
{
|
|
zend_object_value retval;
|
|
php_fdfs_t *i_obj;
|
|
|
|
i_obj = (php_fdfs_t *)ecalloc(1, sizeof(php_fdfs_t));
|
|
|
|
zend_object_std_init(&i_obj->zo, ce TSRMLS_CC);
|
|
retval.handle = zend_objects_store_put(i_obj, \
|
|
(zend_objects_store_dtor_t)zend_objects_destroy_object, \
|
|
(zend_objects_free_object_storage_t)php_fdfs_free_storage, \
|
|
NULL TSRMLS_CC);
|
|
retval.handlers = zend_get_std_object_handlers();
|
|
|
|
return retval;
|
|
}
|
|
|
|
PHP_FASTDFS_API zend_class_entry *php_fdfs_get_ce(void)
|
|
{
|
|
return fdfs_ce;
|
|
}
|
|
|
|
PHP_FASTDFS_API zend_class_entry *php_fdfs_get_exception(void)
|
|
{
|
|
return fdfs_exception_ce;
|
|
}
|
|
|
|
PHP_FASTDFS_API zend_class_entry *php_fdfs_get_exception_base(int root TSRMLS_DC)
|
|
{
|
|
#if HAVE_SPL
|
|
if (!root)
|
|
{
|
|
if (!spl_ce_RuntimeException)
|
|
{
|
|
zend_class_entry **pce;
|
|
zend_class_entry ***ppce;
|
|
|
|
ppce = &pce;
|
|
if (zend_hash_find(CG(class_table), "runtimeexception",
|
|
sizeof("RuntimeException"), (void **) ppce) == SUCCESS)
|
|
{
|
|
spl_ce_RuntimeException = *pce;
|
|
return *pce;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
return spl_ce_RuntimeException;
|
|
}
|
|
}
|
|
#endif
|
|
#if (PHP_MAJOR_VERSION == 5) && (PHP_MINOR_VERSION < 2)
|
|
return zend_exception_get_default();
|
|
#else
|
|
return zend_exception_get_default(TSRMLS_C);
|
|
#endif
|
|
}
|
|
|
|
|
|
static int load_config_files()
|
|
{
|
|
#define ITEM_NAME_CONF_COUNT "fastdfs_client.tracker_group_count"
|
|
#define ITEM_NAME_CONF_FILE "fastdfs_client.tracker_group"
|
|
#define ITEM_NAME_BASE_PATH "fastdfs_client.base_path"
|
|
#define ITEM_NAME_CONNECT_TIMEOUT "fastdfs_client.connect_timeout"
|
|
#define ITEM_NAME_NETWORK_TIMEOUT "fastdfs_client.network_timeout"
|
|
#define ITEM_NAME_LOG_LEVEL "fastdfs_client.log_level"
|
|
#define ITEM_NAME_LOG_FILENAME "fastdfs_client.log_filename"
|
|
#define ITEM_NAME_ANTI_STEAL_SECRET_KEY "fastdfs_client.http.anti_steal_secret_key"
|
|
#define ITEM_NAME_USE_CONN_POOL "fastdfs_client.use_connection_pool"
|
|
#define ITEM_NAME_CONN_POOL_MAX_IDLE_TIME "fastdfs_client.connection_pool_max_idle_time"
|
|
|
|
zval conf_c;
|
|
zval base_path;
|
|
zval connect_timeout;
|
|
zval network_timeout;
|
|
zval log_level;
|
|
zval anti_steal_secret_key;
|
|
zval log_filename;
|
|
zval conf_filename;
|
|
zval use_conn_pool;
|
|
zval conn_pool_max_idle_time;
|
|
char *pAntiStealSecretKey;
|
|
char szItemName[sizeof(ITEM_NAME_CONF_FILE) + 10];
|
|
int nItemLen;
|
|
FDFSConfigInfo *pConfigInfo;
|
|
FDFSConfigInfo *pConfigEnd;
|
|
int result;
|
|
|
|
if (zend_get_configuration_directive(ITEM_NAME_CONF_COUNT,
|
|
sizeof(ITEM_NAME_CONF_COUNT), &conf_c) == SUCCESS)
|
|
{
|
|
config_count = atoi(conf_c.value.str.val);
|
|
if (config_count <= 0)
|
|
{
|
|
fprintf(stderr, "file: "__FILE__", line: %d, " \
|
|
"fastdfs_client.ini, config_count: %d <= 0!\n",\
|
|
__LINE__, config_count);
|
|
return EINVAL;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
config_count = 1;
|
|
}
|
|
|
|
if (zend_get_configuration_directive(ITEM_NAME_BASE_PATH, \
|
|
sizeof(ITEM_NAME_BASE_PATH), &base_path) != SUCCESS)
|
|
{
|
|
strcpy(g_fdfs_base_path, "/tmp");
|
|
fprintf(stderr, "file: "__FILE__", line: %d, " \
|
|
"fastdht_client.ini does not have item " \
|
|
"\"%s\", set to %s!", __LINE__,
|
|
ITEM_NAME_BASE_PATH, g_fdfs_base_path);
|
|
}
|
|
else
|
|
{
|
|
snprintf(g_fdfs_base_path, sizeof(g_fdfs_base_path), "%s", \
|
|
base_path.value.str.val);
|
|
chopPath(g_fdfs_base_path);
|
|
}
|
|
|
|
if (!fileExists(g_fdfs_base_path))
|
|
{
|
|
logError("\"%s\" can't be accessed, error info: %s", \
|
|
g_fdfs_base_path, STRERROR(errno));
|
|
return errno != 0 ? errno : ENOENT;
|
|
}
|
|
if (!isDir(g_fdfs_base_path))
|
|
{
|
|
logError("\"%s\" is not a directory!", g_fdfs_base_path);
|
|
return ENOTDIR;
|
|
}
|
|
|
|
if (zend_get_configuration_directive(ITEM_NAME_CONNECT_TIMEOUT, \
|
|
sizeof(ITEM_NAME_CONNECT_TIMEOUT), \
|
|
&connect_timeout) == SUCCESS)
|
|
{
|
|
g_fdfs_connect_timeout = atoi(connect_timeout.value.str.val);
|
|
if (g_fdfs_connect_timeout <= 0)
|
|
{
|
|
g_fdfs_connect_timeout = DEFAULT_CONNECT_TIMEOUT;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
g_fdfs_connect_timeout = DEFAULT_CONNECT_TIMEOUT;
|
|
}
|
|
|
|
if (zend_get_configuration_directive(ITEM_NAME_NETWORK_TIMEOUT, \
|
|
sizeof(ITEM_NAME_NETWORK_TIMEOUT), \
|
|
&network_timeout) == SUCCESS)
|
|
{
|
|
g_fdfs_network_timeout = atoi(network_timeout.value.str.val);
|
|
if (g_fdfs_network_timeout <= 0)
|
|
{
|
|
g_fdfs_network_timeout = DEFAULT_NETWORK_TIMEOUT;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
g_fdfs_network_timeout = DEFAULT_NETWORK_TIMEOUT;
|
|
}
|
|
|
|
if (zend_get_configuration_directive(ITEM_NAME_LOG_LEVEL, \
|
|
sizeof(ITEM_NAME_LOG_LEVEL), \
|
|
&log_level) == SUCCESS)
|
|
{
|
|
set_log_level(log_level.value.str.val);
|
|
}
|
|
|
|
|
|
if (zend_get_configuration_directive(ITEM_NAME_LOG_FILENAME, \
|
|
sizeof(ITEM_NAME_LOG_FILENAME), \
|
|
&log_filename) == SUCCESS)
|
|
{
|
|
if (log_filename.value.str.len > 0)
|
|
{
|
|
log_set_filename(log_filename.value.str.val);
|
|
}
|
|
}
|
|
|
|
if (zend_get_configuration_directive(ITEM_NAME_ANTI_STEAL_SECRET_KEY, \
|
|
sizeof(ITEM_NAME_ANTI_STEAL_SECRET_KEY), \
|
|
&anti_steal_secret_key) == SUCCESS)
|
|
{
|
|
pAntiStealSecretKey = anti_steal_secret_key.value.str.val;
|
|
}
|
|
else
|
|
{
|
|
pAntiStealSecretKey = "";
|
|
}
|
|
buffer_strcpy(&g_anti_steal_secret_key, pAntiStealSecretKey);
|
|
|
|
config_list = (FDFSConfigInfo *)malloc(sizeof(FDFSConfigInfo) * \
|
|
config_count);
|
|
if (config_list == NULL)
|
|
{
|
|
fprintf(stderr, "file: "__FILE__", line: %d, " \
|
|
"malloc %d bytes fail!\n",\
|
|
__LINE__, (int)sizeof(FDFSConfigInfo) * config_count);
|
|
return errno != 0 ? errno : ENOMEM;
|
|
}
|
|
|
|
pConfigEnd = config_list + config_count;
|
|
for (pConfigInfo=config_list; pConfigInfo<pConfigEnd; pConfigInfo++)
|
|
{
|
|
nItemLen = sprintf(szItemName, "%s%d", ITEM_NAME_CONF_FILE, \
|
|
(int)(pConfigInfo - config_list));
|
|
if (zend_get_configuration_directive(szItemName, \
|
|
nItemLen + 1, &conf_filename) != SUCCESS)
|
|
{
|
|
if (pConfigInfo != config_list)
|
|
{
|
|
fprintf(stderr, "file: "__FILE__", line: %d, " \
|
|
"fastdfs_client.ini: get param %s " \
|
|
"fail!\n", __LINE__, szItemName);
|
|
|
|
return ENOENT;
|
|
}
|
|
|
|
if (zend_get_configuration_directive( \
|
|
ITEM_NAME_CONF_FILE, \
|
|
sizeof(ITEM_NAME_CONF_FILE), \
|
|
&conf_filename) != SUCCESS)
|
|
{
|
|
fprintf(stderr, "file: "__FILE__", line: %d, " \
|
|
"fastdfs_client.ini: get param %s " \
|
|
"fail!\n",__LINE__,ITEM_NAME_CONF_FILE);
|
|
|
|
return ENOENT;
|
|
}
|
|
}
|
|
|
|
if (pConfigInfo == config_list) //first config file
|
|
{
|
|
pConfigInfo->pTrackerGroup = &g_tracker_group;
|
|
}
|
|
else
|
|
{
|
|
pConfigInfo->pTrackerGroup = (TrackerServerGroup *)malloc( \
|
|
sizeof(TrackerServerGroup));
|
|
if (pConfigInfo->pTrackerGroup == NULL)
|
|
{
|
|
fprintf(stderr, "file: "__FILE__", line: %d, " \
|
|
"malloc %d bytes fail!\n", \
|
|
__LINE__, (int)sizeof(TrackerServerGroup));
|
|
return errno != 0 ? errno : ENOMEM;
|
|
}
|
|
}
|
|
|
|
if ((result=fdfs_load_tracker_group(pConfigInfo->pTrackerGroup,
|
|
conf_filename.value.str.val)) != 0)
|
|
{
|
|
return result;
|
|
}
|
|
}
|
|
|
|
|
|
if (zend_get_configuration_directive(ITEM_NAME_USE_CONN_POOL,
|
|
sizeof(ITEM_NAME_USE_CONN_POOL), &use_conn_pool) == SUCCESS)
|
|
{
|
|
char *use_conn_pool_str;
|
|
|
|
use_conn_pool_str = use_conn_pool.value.str.val;
|
|
if (strcasecmp(use_conn_pool_str, "yes") == 0 ||
|
|
strcasecmp(use_conn_pool_str, "on") == 0 ||
|
|
strcasecmp(use_conn_pool_str, "true") == 0 ||
|
|
strcmp(use_conn_pool_str, "1") == 0)
|
|
{
|
|
if (zend_get_configuration_directive( \
|
|
ITEM_NAME_CONN_POOL_MAX_IDLE_TIME, \
|
|
sizeof(ITEM_NAME_CONN_POOL_MAX_IDLE_TIME), \
|
|
&conn_pool_max_idle_time) == SUCCESS)
|
|
{
|
|
g_connection_pool_max_idle_time = \
|
|
atoi(conn_pool_max_idle_time.value.str.val);
|
|
if (g_connection_pool_max_idle_time <= 0)
|
|
{
|
|
logError("file: "__FILE__", line: %d, " \
|
|
"%s: %d in config filename" \
|
|
"is invalid!", __LINE__, \
|
|
ITEM_NAME_CONN_POOL_MAX_IDLE_TIME, \
|
|
g_connection_pool_max_idle_time);
|
|
return EINVAL;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
g_connection_pool_max_idle_time = 3600;
|
|
}
|
|
|
|
g_use_connection_pool = true;
|
|
result = conn_pool_init(&g_connection_pool, \
|
|
g_fdfs_connect_timeout, \
|
|
0, g_connection_pool_max_idle_time);
|
|
if (result != 0)
|
|
{
|
|
return result;
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
logDebug("base_path=%s, connect_timeout=%d, network_timeout=%d, " \
|
|
"anti_steal_secret_key length=%d, " \
|
|
"tracker_group_count=%d, first tracker group server_count=%d, "\
|
|
"use_connection_pool=%d, connection_pool_max_idle_time: %d", \
|
|
g_fdfs_base_path, g_fdfs_connect_timeout, \
|
|
g_fdfs_network_timeout, (int)strlen(pAntiStealSecretKey), \
|
|
config_count, g_tracker_group.server_count, \
|
|
g_use_connection_pool, g_connection_pool_max_idle_time);
|
|
|
|
return 0;
|
|
}
|
|
|
|
PHP_MINIT_FUNCTION(fastdfs_client)
|
|
{
|
|
zend_class_entry ce;
|
|
|
|
log_init();
|
|
if (load_config_files() != 0)
|
|
{
|
|
return FAILURE;
|
|
}
|
|
|
|
le_fdht = zend_register_list_destructors_ex(NULL, php_fdfs_dtor, \
|
|
"FastDFS", module_number);
|
|
|
|
INIT_CLASS_ENTRY(ce, "FastDFS", fdfs_class_methods);
|
|
fdfs_ce = zend_register_internal_class(&ce TSRMLS_CC);
|
|
fdfs_ce->create_object = php_fdfs_new;
|
|
|
|
INIT_CLASS_ENTRY(ce, "FastDFSException", NULL);
|
|
fdfs_exception_ce = zend_register_internal_class_ex(&ce, \
|
|
php_fdfs_get_exception_base(0 TSRMLS_CC), NULL TSRMLS_CC);
|
|
|
|
REGISTER_STRING_CONSTANT("FDFS_FILE_ID_SEPERATOR", \
|
|
FDFS_FILE_ID_SEPERATE_STR, \
|
|
CONST_CS | CONST_PERSISTENT);
|
|
|
|
REGISTER_STRING_CONSTANT("FDFS_STORAGE_SET_METADATA_FLAG_OVERWRITE", \
|
|
STORAGE_SET_METADATA_FLAG_OVERWRITE_STR, \
|
|
CONST_CS | CONST_PERSISTENT);
|
|
|
|
REGISTER_STRING_CONSTANT("FDFS_STORAGE_SET_METADATA_FLAG_MERGE", \
|
|
STORAGE_SET_METADATA_FLAG_MERGE_STR, \
|
|
CONST_CS | CONST_PERSISTENT);
|
|
|
|
REGISTER_LONG_CONSTANT("FDFS_STORAGE_STATUS_INIT", \
|
|
FDFS_STORAGE_STATUS_INIT, CONST_CS | CONST_PERSISTENT);
|
|
REGISTER_LONG_CONSTANT("FDFS_STORAGE_STATUS_WAIT_SYNC", \
|
|
FDFS_STORAGE_STATUS_WAIT_SYNC, CONST_CS | CONST_PERSISTENT);
|
|
REGISTER_LONG_CONSTANT("FDFS_STORAGE_STATUS_SYNCING", \
|
|
FDFS_STORAGE_STATUS_SYNCING, CONST_CS | CONST_PERSISTENT);
|
|
REGISTER_LONG_CONSTANT("FDFS_STORAGE_STATUS_DELETED", \
|
|
FDFS_STORAGE_STATUS_DELETED, CONST_CS | CONST_PERSISTENT);
|
|
REGISTER_LONG_CONSTANT("FDFS_STORAGE_STATUS_OFFLINE", \
|
|
FDFS_STORAGE_STATUS_OFFLINE, CONST_CS | CONST_PERSISTENT);
|
|
REGISTER_LONG_CONSTANT("FDFS_STORAGE_STATUS_ONLINE", \
|
|
FDFS_STORAGE_STATUS_ONLINE, CONST_CS | CONST_PERSISTENT);
|
|
REGISTER_LONG_CONSTANT("FDFS_STORAGE_STATUS_ACTIVE", \
|
|
FDFS_STORAGE_STATUS_ACTIVE, CONST_CS | CONST_PERSISTENT);
|
|
REGISTER_LONG_CONSTANT("FDFS_STORAGE_STATUS_NONE", \
|
|
FDFS_STORAGE_STATUS_NONE, CONST_CS | CONST_PERSISTENT);
|
|
|
|
return SUCCESS;
|
|
}
|
|
|
|
PHP_MSHUTDOWN_FUNCTION(fastdfs_client)
|
|
{
|
|
FDFSConfigInfo *pConfigInfo;
|
|
FDFSConfigInfo *pConfigEnd;
|
|
|
|
if (config_list != NULL)
|
|
{
|
|
pConfigEnd = config_list + config_count;
|
|
for (pConfigInfo=config_list; pConfigInfo<pConfigEnd; \
|
|
pConfigInfo++)
|
|
{
|
|
if (pConfigInfo->pTrackerGroup != NULL)
|
|
{
|
|
tracker_close_all_connections_ex( \
|
|
pConfigInfo->pTrackerGroup);
|
|
}
|
|
}
|
|
}
|
|
|
|
if (g_use_connection_pool)
|
|
{
|
|
fdfs_connection_pool_destroy();
|
|
}
|
|
|
|
fdfs_client_destroy();
|
|
log_destroy();
|
|
|
|
return SUCCESS;
|
|
}
|
|
|
|
PHP_RINIT_FUNCTION(fastdfs_client)
|
|
{
|
|
return SUCCESS;
|
|
}
|
|
|
|
PHP_RSHUTDOWN_FUNCTION(fastdfs_client)
|
|
{
|
|
fprintf(stderr, "request shut down. file: "__FILE__", line: %d\n", __LINE__);
|
|
return SUCCESS;
|
|
}
|
|
|
|
PHP_MINFO_FUNCTION(fastdfs_client)
|
|
{
|
|
char fastdfs_info[64];
|
|
sprintf(fastdfs_info, "fastdfs_client v%d.%02d support",
|
|
g_fdfs_version.major, g_fdfs_version.minor);
|
|
|
|
php_info_print_table_start();
|
|
php_info_print_table_header(2, fastdfs_info, "enabled");
|
|
php_info_print_table_end();
|
|
}
|
|
|