diff --git a/ext/ftp/php_ftp.c b/ext/ftp/php_ftp.c index 30bffbdd8c8..88a3cd02e7c 100644 --- a/ext/ftp/php_ftp.c +++ b/ext/ftp/php_ftp.c @@ -82,6 +82,11 @@ static zend_object* ftp_object_create(zend_class_entry* ce) { return zobj; } +static zend_function *ftp_object_get_constructor(zend_object *zobj) { + zend_throw_error(NULL, "Cannot directly construct FTPConnection, use ftp_connect() or ftp_ssl_connect() instead"); + return NULL; +} + static void ftp_object_destroy(zend_object *zobj) { php_ftp_object *obj = ftp_object_from_zend_object(zobj); @@ -114,6 +119,7 @@ PHP_MINIT_FUNCTION(ftp) memcpy(&ftp_object_handlers, &std_object_handlers, sizeof(zend_object_handlers)); ftp_object_handlers.offset = XtOffsetOf(php_ftp_object, std); + ftp_object_handlers.get_constructor = ftp_object_get_constructor; ftp_object_handlers.dtor_obj = ftp_object_destroy; ftp_object_handlers.clone_obj = NULL; diff --git a/ext/ftp/tests/ftp_constructor.phpt b/ext/ftp/tests/ftp_constructor.phpt new file mode 100644 index 00000000000..881677f6a55 --- /dev/null +++ b/ext/ftp/tests/ftp_constructor.phpt @@ -0,0 +1,15 @@ +--TEST-- +Attempt to instantiate an FTPConnection directly +--SKIPIF-- +getMessage(), "\n"; +} +--EXPECT-- +Exception: Cannot directly construct FTPConnection, use ftp_connect() or ftp_ssl_connect() instead