Skip to content

Commit ff5eb09

Browse files
committed
Convert CURL resources to objects
1 parent 7a260a4 commit ff5eb09

File tree

7 files changed

+393
-376
lines changed

7 files changed

+393
-376
lines changed

UPGRADING

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -560,6 +560,21 @@ PHP 8.0 UPGRADE NOTES
560560

561561
- CURL:
562562
. The CURL extension now requires at least libcurl 7.29.0.
563+
. curl_init() will now return a Curl object rather than a resource.
564+
Return value checks using is_resource() should be replaced with
565+
checks for `false`. The curl_close() function no longer has an effect,
566+
instead the Curl instance is automatically destroyed if it is no longer
567+
referenced.
568+
. curl_multi_init() will now return a CurlMulti object rather than a resource.
569+
Return value checks using is_resource() should be replaced with
570+
checks for `false`. The curl_multi_close() function no longer has an effect,
571+
instead the CurlMulti instance is automatically destroyed if it is no longer
572+
referenced.
573+
. curl_share_init() will now return a CurlShare object rather than a resource.
574+
Return value checks using is_resource() should be replaced with
575+
checks for `false`. The curl_share_close() function no longer has an effect,
576+
instead the CurlShare instance is automatically destroyed if it is no longer
577+
referenced.
563578

564579
- GD:
565580
. The $num_points parameter of imagepolygon(), imageopenpolygon() and

ext/curl/curl.stub.php

Lines changed: 32 additions & 80 deletions
Original file line numberDiff line numberDiff line change
@@ -2,120 +2,72 @@
22

33
/** @generate-function-entries */
44

5-
/** @param resource $handle */
6-
function curl_close($handle): void {}
5+
function curl_close(Curl $handle): void {}
76

8-
/**
9-
* @param resource $handle
10-
* @return resource|false
11-
*/
12-
function curl_copy_handle($handle) {}
7+
function curl_copy_handle(Curl $handle): Curl|false {}
138

14-
/** @param resource $handle */
15-
function curl_errno($handle): int {}
9+
function curl_errno(Curl $handle): int {}
1610

17-
/** @param resource $handle */
18-
function curl_error($handle): string {}
11+
function curl_error(Curl $handle): string {}
1912

2013
#if LIBCURL_VERSION_NUM >= 0x070f04 /* 7.15.4 */
21-
/** @param resource $handle */
22-
function curl_escape($handle, string $string): string|false {}
14+
function curl_escape(Curl $handle, string $string): string|false {}
2315

24-
/** @param resource $handle */
25-
function curl_unescape($handle, string $string): string|false {}
16+
function curl_unescape(Curl $handle, string $string): string|false {}
2617

27-
/**
28-
* @param resource $multi_handle
29-
* @param mixed $value
30-
*/
31-
function curl_multi_setopt($multi_handle, int $option, $value): bool {}
18+
/** @param mixed $value */
19+
function curl_multi_setopt(CurlMulti $multi_handle, int $option, $value): bool {}
3220

3321
#endif
3422

35-
/** @param resource $handle */
36-
function curl_exec($handle): string|bool {}
23+
function curl_exec(Curl $handle): string|bool {}
3724

38-
function curl_file_create(
39-
string $filename,
40-
string $mimetype = UNKNOWN,
41-
string $postname = UNKNOWN
42-
): CURLFile {}
25+
function curl_file_create(string $filename, string $mimetype = UNKNOWN, string $postname = UNKNOWN): CURLFile {}
4326

44-
/**
45-
* @param resource $handle
46-
* @return mixed
47-
*/
48-
function curl_getinfo($handle, int $option = UNKNOWN) {}
27+
/** @return mixed */
28+
function curl_getinfo(Curl $handle, int $option = UNKNOWN) {}
4929

50-
/**
51-
* @param resource $handle
52-
* @return resource|false
53-
*/
54-
function curl_init(string $url = UNKNOWN) {}
30+
function curl_init(string $url = UNKNOWN): Curl|false {}
5531

56-
/**
57-
* @param resource $multi_handle
58-
* @param resource $handle
59-
*/
60-
function curl_multi_add_handle($multi_handle, $handle): int {}
32+
function curl_multi_add_handle(CurlMulti $multi_handle, Curl $handle): int {}
6133

62-
/** @param resource $multi_handle */
63-
function curl_multi_close($multi_handle): void {}
34+
function curl_multi_close(CurlMulti $multi_handle): void {}
6435

65-
/** @param resource $multi_handle */
66-
function curl_multi_errno($multi_handle): int {}
36+
function curl_multi_errno(CurlMulti $multi_handle): int {}
6737

68-
/** @param resource $multi_handle */
69-
function curl_multi_exec($multi_handle, &$still_running): int {}
38+
function curl_multi_exec(CurlMulti $multi_handle, &$still_running): int {}
7039

71-
/** @param resource $multi_handle */
72-
function curl_multi_getcontent($multi_handle): ?string {}
40+
function curl_multi_getcontent(CurlMulti $multi_handle): ?string {}
7341

74-
/** @param resource $multi_handle */
75-
function curl_multi_info_read($multi_handle, &$msgs_in_queue = null): array|false {}
42+
function curl_multi_info_read(CurlMulti $multi_handle, &$msgs_in_queue = null): array|false {}
7643

77-
/** @return resource */
78-
function curl_multi_init() {}
44+
function curl_multi_init(): CurlMulti {}
7945

80-
/**
81-
* @param resource $multi_handle
82-
* @param resource $handle
83-
*/
84-
function curl_multi_remove_handle($multi_handle, $handle): int {}
46+
function curl_multi_remove_handle(CurlMulti $multi_handle, Curl $handle): int {}
8547

86-
/** @param resource $multi_handle */
87-
function curl_multi_select($multi_handle, float $timeout = 1.0): int {}
48+
function curl_multi_select(CurlMulti $multi_handle, float $timeout = 1.0): int {}
8849

8950
function curl_multi_strerror(int $error_number): ?string {}
9051

9152
#if LIBCURL_VERSION_NUM >= 0x071200 /* 7.18.0 */
92-
/** @param resource $handle */
93-
function curl_pause($handle, int $bitmask): int {}
53+
function curl_pause(Curl $handle, int $bitmask): int {}
9454
#endif
9555

96-
/** @param resource $handle */
97-
function curl_reset($handle): void {}
56+
function curl_reset(Curl $handle): void {}
9857

99-
/** @param resource $handle */
100-
function curl_setopt_array($handle, array $options): bool {}
58+
function curl_setopt_array(Curl $handle, array $options): bool {}
10159

102-
/**
103-
* @param resource $handle
104-
* @param mixed $value
105-
*/
106-
function curl_setopt($handle, int $option, $value): bool {}
60+
/** @param mixed $value */
61+
function curl_setopt(Curl $handle, int $option, $value): bool {}
10762

108-
/** @param resource $share_handle */
109-
function curl_share_close($share_handle): void {}
63+
function curl_share_close(CurlShare $share_handle): void {}
11064

111-
/** @param resource $share_handle */
112-
function curl_share_errno($share_handle): int {}
65+
function curl_share_errno(CurlShare $share_handle): int {}
11366

114-
/** @return resource */
115-
function curl_share_init() {}
67+
function curl_share_init(): CurlShare {}
11668

117-
/** @param resource $share_handle */
118-
function curl_share_setopt($share_handle, int $option, $value): bool {}
69+
/** @param mixed $value */
70+
function curl_share_setopt(CurlShare $share_handle, int $option, $value): bool {}
11971

12072
function curl_share_strerror(int $error_number): ?string {}
12173

ext/curl/curl_arginfo.h

Lines changed: 27 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,24 @@
11
/* This is a generated file, edit the .stub.php file instead. */
22

33
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_curl_close, 0, 1, IS_VOID, 0)
4-
ZEND_ARG_INFO(0, handle)
4+
ZEND_ARG_OBJ_INFO(0, handle, Curl, 0)
55
ZEND_END_ARG_INFO()
66

7-
ZEND_BEGIN_ARG_INFO_EX(arginfo_curl_copy_handle, 0, 0, 1)
8-
ZEND_ARG_INFO(0, handle)
7+
ZEND_BEGIN_ARG_WITH_RETURN_OBJ_TYPE_MASK_EX(arginfo_curl_copy_handle, 0, 1, Curl, MAY_BE_FALSE)
8+
ZEND_ARG_OBJ_INFO(0, handle, Curl, 0)
99
ZEND_END_ARG_INFO()
1010

1111
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_curl_errno, 0, 1, IS_LONG, 0)
12-
ZEND_ARG_INFO(0, handle)
12+
ZEND_ARG_OBJ_INFO(0, handle, Curl, 0)
1313
ZEND_END_ARG_INFO()
1414

1515
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_curl_error, 0, 1, IS_STRING, 0)
16-
ZEND_ARG_INFO(0, handle)
16+
ZEND_ARG_OBJ_INFO(0, handle, Curl, 0)
1717
ZEND_END_ARG_INFO()
1818

1919
#if LIBCURL_VERSION_NUM >= 0x070f04 /* 7.15.4 */
2020
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_curl_escape, 0, 2, MAY_BE_STRING|MAY_BE_FALSE)
21-
ZEND_ARG_INFO(0, handle)
21+
ZEND_ARG_OBJ_INFO(0, handle, Curl, 0)
2222
ZEND_ARG_TYPE_INFO(0, string, IS_STRING, 0)
2323
ZEND_END_ARG_INFO()
2424
#endif
@@ -29,14 +29,14 @@ ZEND_END_ARG_INFO()
2929

3030
#if LIBCURL_VERSION_NUM >= 0x070f04 /* 7.15.4 */
3131
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_curl_multi_setopt, 0, 3, _IS_BOOL, 0)
32-
ZEND_ARG_INFO(0, multi_handle)
32+
ZEND_ARG_OBJ_INFO(0, multi_handle, CurlMulti, 0)
3333
ZEND_ARG_TYPE_INFO(0, option, IS_LONG, 0)
3434
ZEND_ARG_INFO(0, value)
3535
ZEND_END_ARG_INFO()
3636
#endif
3737

3838
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_curl_exec, 0, 1, MAY_BE_STRING|MAY_BE_BOOL)
39-
ZEND_ARG_INFO(0, handle)
39+
ZEND_ARG_OBJ_INFO(0, handle, Curl, 0)
4040
ZEND_END_ARG_INFO()
4141

4242
ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(arginfo_curl_file_create, 0, 1, CURLFile, 0)
@@ -46,48 +46,48 @@ ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(arginfo_curl_file_create, 0, 1, CURLFile,
4646
ZEND_END_ARG_INFO()
4747

4848
ZEND_BEGIN_ARG_INFO_EX(arginfo_curl_getinfo, 0, 0, 1)
49-
ZEND_ARG_INFO(0, handle)
49+
ZEND_ARG_OBJ_INFO(0, handle, Curl, 0)
5050
ZEND_ARG_TYPE_INFO(0, option, IS_LONG, 0)
5151
ZEND_END_ARG_INFO()
5252

53-
ZEND_BEGIN_ARG_INFO_EX(arginfo_curl_init, 0, 0, 0)
53+
ZEND_BEGIN_ARG_WITH_RETURN_OBJ_TYPE_MASK_EX(arginfo_curl_init, 0, 0, Curl, MAY_BE_FALSE)
5454
ZEND_ARG_TYPE_INFO(0, url, IS_STRING, 0)
5555
ZEND_END_ARG_INFO()
5656

5757
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_curl_multi_add_handle, 0, 2, IS_LONG, 0)
58-
ZEND_ARG_INFO(0, multi_handle)
59-
ZEND_ARG_INFO(0, handle)
58+
ZEND_ARG_OBJ_INFO(0, multi_handle, CurlMulti, 0)
59+
ZEND_ARG_OBJ_INFO(0, handle, Curl, 0)
6060
ZEND_END_ARG_INFO()
6161

6262
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_curl_multi_close, 0, 1, IS_VOID, 0)
63-
ZEND_ARG_INFO(0, multi_handle)
63+
ZEND_ARG_OBJ_INFO(0, multi_handle, CurlMulti, 0)
6464
ZEND_END_ARG_INFO()
6565

6666
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_curl_multi_errno, 0, 1, IS_LONG, 0)
67-
ZEND_ARG_INFO(0, multi_handle)
67+
ZEND_ARG_OBJ_INFO(0, multi_handle, CurlMulti, 0)
6868
ZEND_END_ARG_INFO()
6969

7070
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_curl_multi_exec, 0, 2, IS_LONG, 0)
71-
ZEND_ARG_INFO(0, multi_handle)
71+
ZEND_ARG_OBJ_INFO(0, multi_handle, CurlMulti, 0)
7272
ZEND_ARG_INFO(1, still_running)
7373
ZEND_END_ARG_INFO()
7474

7575
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_curl_multi_getcontent, 0, 1, IS_STRING, 1)
76-
ZEND_ARG_INFO(0, multi_handle)
76+
ZEND_ARG_OBJ_INFO(0, multi_handle, CurlMulti, 0)
7777
ZEND_END_ARG_INFO()
7878

7979
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_curl_multi_info_read, 0, 1, MAY_BE_ARRAY|MAY_BE_FALSE)
80-
ZEND_ARG_INFO(0, multi_handle)
80+
ZEND_ARG_OBJ_INFO(0, multi_handle, CurlMulti, 0)
8181
ZEND_ARG_INFO_WITH_DEFAULT_VALUE(1, msgs_in_queue, "null")
8282
ZEND_END_ARG_INFO()
8383

84-
ZEND_BEGIN_ARG_INFO_EX(arginfo_curl_multi_init, 0, 0, 0)
84+
ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(arginfo_curl_multi_init, 0, 0, CurlMulti, 0)
8585
ZEND_END_ARG_INFO()
8686

8787
#define arginfo_curl_multi_remove_handle arginfo_curl_multi_add_handle
8888

8989
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_curl_multi_select, 0, 1, IS_LONG, 0)
90-
ZEND_ARG_INFO(0, multi_handle)
90+
ZEND_ARG_OBJ_INFO(0, multi_handle, CurlMulti, 0)
9191
ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, timeout, IS_DOUBLE, 0, "1.0")
9292
ZEND_END_ARG_INFO()
9393

@@ -97,36 +97,37 @@ ZEND_END_ARG_INFO()
9797

9898
#if LIBCURL_VERSION_NUM >= 0x071200 /* 7.18.0 */
9999
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_curl_pause, 0, 2, IS_LONG, 0)
100-
ZEND_ARG_INFO(0, handle)
100+
ZEND_ARG_OBJ_INFO(0, handle, Curl, 0)
101101
ZEND_ARG_TYPE_INFO(0, bitmask, IS_LONG, 0)
102102
ZEND_END_ARG_INFO()
103103
#endif
104104

105105
#define arginfo_curl_reset arginfo_curl_close
106106

107107
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_curl_setopt_array, 0, 2, _IS_BOOL, 0)
108-
ZEND_ARG_INFO(0, handle)
108+
ZEND_ARG_OBJ_INFO(0, handle, Curl, 0)
109109
ZEND_ARG_TYPE_INFO(0, options, IS_ARRAY, 0)
110110
ZEND_END_ARG_INFO()
111111

112112
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_curl_setopt, 0, 3, _IS_BOOL, 0)
113-
ZEND_ARG_INFO(0, handle)
113+
ZEND_ARG_OBJ_INFO(0, handle, Curl, 0)
114114
ZEND_ARG_TYPE_INFO(0, option, IS_LONG, 0)
115115
ZEND_ARG_INFO(0, value)
116116
ZEND_END_ARG_INFO()
117117

118118
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_curl_share_close, 0, 1, IS_VOID, 0)
119-
ZEND_ARG_INFO(0, share_handle)
119+
ZEND_ARG_OBJ_INFO(0, share_handle, CurlShare, 0)
120120
ZEND_END_ARG_INFO()
121121

122122
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_curl_share_errno, 0, 1, IS_LONG, 0)
123-
ZEND_ARG_INFO(0, share_handle)
123+
ZEND_ARG_OBJ_INFO(0, share_handle, CurlShare, 0)
124124
ZEND_END_ARG_INFO()
125125

126-
#define arginfo_curl_share_init arginfo_curl_multi_init
126+
ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(arginfo_curl_share_init, 0, 0, CurlShare, 0)
127+
ZEND_END_ARG_INFO()
127128

128129
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_curl_share_setopt, 0, 3, _IS_BOOL, 0)
129-
ZEND_ARG_INFO(0, share_handle)
130+
ZEND_ARG_OBJ_INFO(0, share_handle, CurlShare, 0)
130131
ZEND_ARG_TYPE_INFO(0, option, IS_LONG, 0)
131132
ZEND_ARG_INFO(0, value)
132133
ZEND_END_ARG_INFO()

0 commit comments

Comments
 (0)