[ext-curl] Add \CURLOPT_INFILESIZE_LARGE - #17637

Merged
Ayesh merged 3 commits into
php:masterfrom
OskarStark:feature/CURLOPT_INFILESIZE_LARGE
Apr 9, 2025
Merged

[ext-curl] Add \CURLOPT_INFILESIZE_LARGE#17637
Ayesh merged 3 commits into
php:masterfrom
OskarStark:feature/CURLOPT_INFILESIZE_LARGE

Conversation

@OskarStark

@OskarStarkOskarStark commented Jan 30, 2025

Copy link
Copy Markdown
Contributor

@OskarStark
OskarStarkforce-pushed the feature/CURLOPT_INFILESIZE_LARGE branch from 1637686 to 8678eadCompareJanuary 30, 2025 10:22
@OskarStarkOskarStark changed the title [ext-curl] Add à\CURLOPT_INIFILESIZE_LARGE`[ext-curl] Add \CURLOPT_INIFILESIZE_LARGEJan 30, 2025
@OskarStark
OskarStarkforce-pushed the feature/CURLOPT_INFILESIZE_LARGE branch from 8678ead to bbad36cCompareJanuary 30, 2025 10:22
Comment threadext/curl/interface.c Outdated
@devnexen

devnexen commented Jan 30, 2025

Copy link
Copy Markdown
Member

Two other things:

1/ you very likely edited curl_arginfo.h manually, I would suggest to revert this change locally and using build/gen_stub.php instead, i.e. php build/gen_stub.php ext/curl/curl.stub.php.
2/ Someone will very likely ask you to add a test before committing your change (i.e. ext/curl/tests for how they are made).

@devnexen
devnexen requested a review from AyeshJanuary 30, 2025 11:23
@OskarStark

Copy link
Copy Markdown
ContributorAuthor

1/ you very likely edited curl_arginfo.h manually, I would suggest to revert this change locally and using build/gen_stub.php instead, i.e. php build/gen_stub.php ext/curl/curl.stub.php.

done, thanks

@arnaud-lb

Copy link
Copy Markdown
Member

The existence of two distinct options CURLOPT_INFILESIZE and CURLOPT_INFILESIZE_LARGE is mostly due to low-level C considerations and I'm wondering if this distinction is useful/necessary in PHP. Are there cases where using CURLOPT_INFILESIZE_LARGE instead of CURLOPT_INFILESIZE would not behave as expected? Otherwise, should we define CURLOPT_INFILESIZE to @cvalue CURLOPT_INFILESIZE_LARGE directly?

@OskarStark

OskarStark commented Jan 30, 2025

Copy link
Copy Markdown
ContributorAuthor

I cannot answer this question, but maybe @nicolas-grekas can, but in the linked PR, we need to behave differently yes

@arnaud-lb

Copy link
Copy Markdown
Member

I'm seeing just now that we already expose other _LARGE constants, so my suggestion would create inconsistencies. Therefore it's probably better to just add CURLOPT_INFILESIZE_LARGE as you are suggesting.

@TimWollaTimWolla changed the title [ext-curl] Add \CURLOPT_INIFILESIZE_LARGE[ext-curl] Add \CURLOPT_INFILESIZE_LARGEJan 31, 2025
@TimWolla

Copy link
Copy Markdown
Member

FWIW: The title of the PR typoed the name of the constant, the same issue also exists in the commit message, so probably be careful when merging this.

@OskarStark

Copy link
Copy Markdown
ContributorAuthor

Hi @TimWolla can you explain? I can't see the typo

@devnexen

devnexen commented Feb 1, 2025

Copy link
Copy Markdown
Member

he meant this

Add \CURLOPT_IN I FILESIZE_LARGE
...

you can amend this commit at some point, or the committer will take care of it no worries :)

@OskarStark

OskarStark commented Feb 1, 2025

Copy link
Copy Markdown
ContributorAuthor

Will do

@cmb69

cmb69 commented Feb 2, 2025

Copy link
Copy Markdown
Member

I don't think a test actually sending data using CURLOPT_INFILESIZE_LARGE makes much sense, but a test verifying the interoperability with CURLOPT_INFILESIZE may be reasonable. Does either affect the other (setopt vs getopt)? In case of using both, which takes preference – always the latter? Or does libcurl reject setting both options?

@OskarStark
OskarStarkforce-pushed the feature/CURLOPT_INFILESIZE_LARGE branch from e9ed9d9 to 26ec878CompareFebruary 3, 2025 07:33
@OskarStark

Copy link
Copy Markdown
ContributorAuthor

Please someone take over this PR if needed, I am not into C language and don't know how to test this @cmb69.

Thanks

@Ayesh

Ayesh commented Apr 8, 2025

Copy link
Copy Markdown
Member

Hi @OskarStark,
Thank you for the PR, and apologies for taking a loong time to review this.

The changes from the PR looks good to me. We can't merge this right now, because by the time you submitted the PR and now, the curl_arginfo.h file has changed, so merge conflicts. You can easily fix this by running php build/gen_stub.php while resolving the conflicts.

I have a PR against my php-src fork at Ayesh#28. Do you want to perhaps cherry-pick the commits there adding the tests and the UPGRADING entry?

Otherwise, I will come back to this in a few days and fix conflicts and merge this.

Thank you.

@AyeshAyesh self-assigned this Apr 8, 2025
This is my first PR on this repository and is based on:
* https://github.com/symfony/symfony/pull/59654/files#r1935358570
So feel free to close it :-)
@OskarStark
OskarStarkforce-pushed the feature/CURLOPT_INFILESIZE_LARGE branch from 26ec878 to fa32c75CompareApril 9, 2025 06:01
@OskarStark

Copy link
Copy Markdown
ContributorAuthor

We can't merge this right now, because by the time you submitted the PR and now, the curl_arginfo.h file has changed, so merge conflicts. You can easily fix this by running php build/gen_stub.php while resolving the conflicts.

I rebased and regenerated the stubs.

I would be grateful if you could add the tests while merging, thanks

@Ayesh

Ayesh commented Apr 9, 2025

Copy link
Copy Markdown
Member

I don't think a test actually sending data using CURLOPT_INFILESIZE_LARGE makes much sense, but a test verifying the interoperability with CURLOPT_INFILESIZE may be reasonable. Does either affect the other (setopt vs getopt)? In case of using both, which takes preference – always the latter? Or does libcurl reject setting both options?

Spot-on :)

CURLOPT_INFILESIZE and CURLOPT_INFILESIZE_LARGE seem to be nicely compatible. It accepts CURLOPT_INFILESIZE to set a file size, and CURLOPT_INFILESIZE_LARGE can unset or overwrite it. So replacing existing PHP code with CURLOPT_INFILESIZE_LARGE is safe too.

I added a test with Caddy to print the incoming Content-length header. The tests check whether the header is present, but not really upload a file 2 > GB.

Comment threadUPGRADING Outdated
@Ayesh
Ayeshforce-pushed the feature/CURLOPT_INFILESIZE_LARGE branch from 941a007 to 340166eCompareApril 9, 2025 06:26
@Ayesh
Ayeshforce-pushed the feature/CURLOPT_INFILESIZE_LARGE branch from 340166e to ab88ea3CompareApril 9, 2025 06:42
@Ayesh
Ayeshforce-pushed the feature/CURLOPT_INFILESIZE_LARGE branch from ab88ea3 to b629a73CompareApril 9, 2025 07:11
@Ayesh
Ayesh merged commit 895905b into php:masterApr 9, 2025
@OskarStark
OskarStark deleted the feature/CURLOPT_INFILESIZE_LARGE branch April 9, 2025 07:14
@OskarStark

Copy link
Copy Markdown
ContributorAuthor

Many thanks for the support on this PR 🎉

@Ayesh

Ayesh commented Apr 9, 2025

Copy link
Copy Markdown
Member

Thank you.

We have quite a few Curl options missing in ext-curl. You can see them by running php ext/curl/sync-constants.php | grep CURLOPT_. If there are any options that Symfony HTTP Client could make good use, I think we can try and add them to ext-curl.

@OskarStark

Copy link
Copy Markdown
ContributorAuthor

Good to know, thanks.

Right now I would say only add them when needed. WDYT @nicolas-grekas ?

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants

@OskarStark@devnexen@arnaud-lb@TimWolla@cmb69@Ayesh
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

[ext-curl] Add \CURLOPT_INFILESIZE_LARGE - #17637

Merged
Ayesh merged 3 commits into
php:masterfrom
OskarStark:feature/CURLOPT_INFILESIZE_LARGE
Apr 9, 2025
Merged

[ext-curl] Add \CURLOPT_INFILESIZE_LARGE#17637
Ayesh merged 3 commits into
php:masterfrom
OskarStark:feature/CURLOPT_INFILESIZE_LARGE

Conversation

@OskarStark

@OskarStarkOskarStark commented Jan 30, 2025

Copy link
Copy Markdown
Contributor

@OskarStark
OskarStarkforce-pushed the feature/CURLOPT_INFILESIZE_LARGE branch from 1637686 to 8678eadCompareJanuary 30, 2025 10:22
@OskarStarkOskarStark changed the title [ext-curl] Add à\CURLOPT_INIFILESIZE_LARGE`[ext-curl] Add \CURLOPT_INIFILESIZE_LARGEJan 30, 2025
@OskarStark
OskarStarkforce-pushed the feature/CURLOPT_INFILESIZE_LARGE branch from 8678ead to bbad36cCompareJanuary 30, 2025 10:22
Comment threadext/curl/interface.c Outdated
@devnexen

devnexen commented Jan 30, 2025

Copy link
Copy Markdown
Member

Two other things:

1/ you very likely edited curl_arginfo.h manually, I would suggest to revert this change locally and using build/gen_stub.php instead, i.e. php build/gen_stub.php ext/curl/curl.stub.php.
2/ Someone will very likely ask you to add a test before committing your change (i.e. ext/curl/tests for how they are made).

@devnexen
devnexen requested a review from AyeshJanuary 30, 2025 11:23
@OskarStark

Copy link
Copy Markdown
ContributorAuthor

1/ you very likely edited curl_arginfo.h manually, I would suggest to revert this change locally and using build/gen_stub.php instead, i.e. php build/gen_stub.php ext/curl/curl.stub.php.

done, thanks

@arnaud-lb

Copy link
Copy Markdown
Member

The existence of two distinct options CURLOPT_INFILESIZE and CURLOPT_INFILESIZE_LARGE is mostly due to low-level C considerations and I'm wondering if this distinction is useful/necessary in PHP. Are there cases where using CURLOPT_INFILESIZE_LARGE instead of CURLOPT_INFILESIZE would not behave as expected? Otherwise, should we define CURLOPT_INFILESIZE to @cvalue CURLOPT_INFILESIZE_LARGE directly?

@OskarStark

OskarStark commented Jan 30, 2025

Copy link
Copy Markdown
ContributorAuthor

I cannot answer this question, but maybe @nicolas-grekas can, but in the linked PR, we need to behave differently yes

@arnaud-lb

Copy link
Copy Markdown
Member

I'm seeing just now that we already expose other _LARGE constants, so my suggestion would create inconsistencies. Therefore it's probably better to just add CURLOPT_INFILESIZE_LARGE as you are suggesting.

@TimWollaTimWolla changed the title [ext-curl] Add \CURLOPT_INIFILESIZE_LARGE[ext-curl] Add \CURLOPT_INFILESIZE_LARGEJan 31, 2025
@TimWolla

Copy link
Copy Markdown
Member

FWIW: The title of the PR typoed the name of the constant, the same issue also exists in the commit message, so probably be careful when merging this.

@OskarStark

Copy link
Copy Markdown
ContributorAuthor

Hi @TimWolla can you explain? I can't see the typo

@devnexen

devnexen commented Feb 1, 2025

Copy link
Copy Markdown
Member

he meant this

Add \CURLOPT_IN I FILESIZE_LARGE
...

you can amend this commit at some point, or the committer will take care of it no worries :)

@OskarStark

OskarStark commented Feb 1, 2025

Copy link
Copy Markdown
ContributorAuthor

Will do

@cmb69

cmb69 commented Feb 2, 2025

Copy link
Copy Markdown
Member

I don't think a test actually sending data using CURLOPT_INFILESIZE_LARGE makes much sense, but a test verifying the interoperability with CURLOPT_INFILESIZE may be reasonable. Does either affect the other (setopt vs getopt)? In case of using both, which takes preference – always the latter? Or does libcurl reject setting both options?

@OskarStark
OskarStarkforce-pushed the feature/CURLOPT_INFILESIZE_LARGE branch from e9ed9d9 to 26ec878CompareFebruary 3, 2025 07:33
@OskarStark

Copy link
Copy Markdown
ContributorAuthor

Please someone take over this PR if needed, I am not into C language and don't know how to test this @cmb69.

Thanks

@Ayesh

Ayesh commented Apr 8, 2025

Copy link
Copy Markdown
Member

Hi @OskarStark,
Thank you for the PR, and apologies for taking a loong time to review this.

The changes from the PR looks good to me. We can't merge this right now, because by the time you submitted the PR and now, the curl_arginfo.h file has changed, so merge conflicts. You can easily fix this by running php build/gen_stub.php while resolving the conflicts.

I have a PR against my php-src fork at Ayesh#28. Do you want to perhaps cherry-pick the commits there adding the tests and the UPGRADING entry?

Otherwise, I will come back to this in a few days and fix conflicts and merge this.

Thank you.

@AyeshAyesh self-assigned this Apr 8, 2025
This is my first PR on this repository and is based on:
* https://github.com/symfony/symfony/pull/59654/files#r1935358570
So feel free to close it :-)
@OskarStark
OskarStarkforce-pushed the feature/CURLOPT_INFILESIZE_LARGE branch from 26ec878 to fa32c75CompareApril 9, 2025 06:01
@OskarStark

Copy link
Copy Markdown
ContributorAuthor

We can't merge this right now, because by the time you submitted the PR and now, the curl_arginfo.h file has changed, so merge conflicts. You can easily fix this by running php build/gen_stub.php while resolving the conflicts.

I rebased and regenerated the stubs.

I would be grateful if you could add the tests while merging, thanks

@Ayesh

Ayesh commented Apr 9, 2025

Copy link
Copy Markdown
Member

I don't think a test actually sending data using CURLOPT_INFILESIZE_LARGE makes much sense, but a test verifying the interoperability with CURLOPT_INFILESIZE may be reasonable. Does either affect the other (setopt vs getopt)? In case of using both, which takes preference – always the latter? Or does libcurl reject setting both options?

Spot-on :)

CURLOPT_INFILESIZE and CURLOPT_INFILESIZE_LARGE seem to be nicely compatible. It accepts CURLOPT_INFILESIZE to set a file size, and CURLOPT_INFILESIZE_LARGE can unset or overwrite it. So replacing existing PHP code with CURLOPT_INFILESIZE_LARGE is safe too.

I added a test with Caddy to print the incoming Content-length header. The tests check whether the header is present, but not really upload a file 2 > GB.

Comment threadUPGRADING Outdated
@Ayesh
Ayeshforce-pushed the feature/CURLOPT_INFILESIZE_LARGE branch from 941a007 to 340166eCompareApril 9, 2025 06:26
@Ayesh
Ayeshforce-pushed the feature/CURLOPT_INFILESIZE_LARGE branch from 340166e to ab88ea3CompareApril 9, 2025 06:42
@Ayesh
Ayeshforce-pushed the feature/CURLOPT_INFILESIZE_LARGE branch from ab88ea3 to b629a73CompareApril 9, 2025 07:11
@Ayesh
Ayesh merged commit 895905b into php:masterApr 9, 2025
@OskarStark
OskarStark deleted the feature/CURLOPT_INFILESIZE_LARGE branch April 9, 2025 07:14
@OskarStark

Copy link
Copy Markdown
ContributorAuthor

Many thanks for the support on this PR 🎉

@Ayesh

Ayesh commented Apr 9, 2025

Copy link
Copy Markdown
Member

Thank you.

We have quite a few Curl options missing in ext-curl. You can see them by running php ext/curl/sync-constants.php | grep CURLOPT_. If there are any options that Symfony HTTP Client could make good use, I think we can try and add them to ext-curl.

@OskarStark

Copy link
Copy Markdown
ContributorAuthor

Good to know, thanks.

Right now I would say only add them when needed. WDYT @nicolas-grekas ?

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants

@OskarStark@devnexen@arnaud-lb@TimWolla@cmb69@Ayesh
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

[ext-curl] Add \CURLOPT_INFILESIZE_LARGE - #17637

Merged
Ayesh merged 3 commits into
php:masterfrom
OskarStark:feature/CURLOPT_INFILESIZE_LARGE
Apr 9, 2025
Merged

[ext-curl] Add \CURLOPT_INFILESIZE_LARGE#17637
Ayesh merged 3 commits into
php:masterfrom
OskarStark:feature/CURLOPT_INFILESIZE_LARGE

Conversation

@OskarStark

@OskarStarkOskarStark commented Jan 30, 2025

Copy link
Copy Markdown
Contributor

@OskarStark
OskarStarkforce-pushed the feature/CURLOPT_INFILESIZE_LARGE branch from 1637686 to 8678eadCompareJanuary 30, 2025 10:22
@OskarStarkOskarStark changed the title [ext-curl] Add à\CURLOPT_INIFILESIZE_LARGE`[ext-curl] Add \CURLOPT_INIFILESIZE_LARGEJan 30, 2025
@OskarStark
OskarStarkforce-pushed the feature/CURLOPT_INFILESIZE_LARGE branch from 8678ead to bbad36cCompareJanuary 30, 2025 10:22
Comment threadext/curl/interface.c Outdated
@devnexen

devnexen commented Jan 30, 2025

Copy link
Copy Markdown
Member

Two other things:

1/ you very likely edited curl_arginfo.h manually, I would suggest to revert this change locally and using build/gen_stub.php instead, i.e. php build/gen_stub.php ext/curl/curl.stub.php.
2/ Someone will very likely ask you to add a test before committing your change (i.e. ext/curl/tests for how they are made).

@devnexen
devnexen requested a review from AyeshJanuary 30, 2025 11:23
@OskarStark

Copy link
Copy Markdown
ContributorAuthor

1/ you very likely edited curl_arginfo.h manually, I would suggest to revert this change locally and using build/gen_stub.php instead, i.e. php build/gen_stub.php ext/curl/curl.stub.php.

done, thanks

@arnaud-lb

Copy link
Copy Markdown
Member

The existence of two distinct options CURLOPT_INFILESIZE and CURLOPT_INFILESIZE_LARGE is mostly due to low-level C considerations and I'm wondering if this distinction is useful/necessary in PHP. Are there cases where using CURLOPT_INFILESIZE_LARGE instead of CURLOPT_INFILESIZE would not behave as expected? Otherwise, should we define CURLOPT_INFILESIZE to @cvalue CURLOPT_INFILESIZE_LARGE directly?

@OskarStark

OskarStark commented Jan 30, 2025

Copy link
Copy Markdown
ContributorAuthor

I cannot answer this question, but maybe @nicolas-grekas can, but in the linked PR, we need to behave differently yes

@arnaud-lb

Copy link
Copy Markdown
Member

I'm seeing just now that we already expose other _LARGE constants, so my suggestion would create inconsistencies. Therefore it's probably better to just add CURLOPT_INFILESIZE_LARGE as you are suggesting.

@TimWollaTimWolla changed the title [ext-curl] Add \CURLOPT_INIFILESIZE_LARGE[ext-curl] Add \CURLOPT_INFILESIZE_LARGEJan 31, 2025
@TimWolla

Copy link
Copy Markdown
Member

FWIW: The title of the PR typoed the name of the constant, the same issue also exists in the commit message, so probably be careful when merging this.

@OskarStark

Copy link
Copy Markdown
ContributorAuthor

Hi @TimWolla can you explain? I can't see the typo

@devnexen

devnexen commented Feb 1, 2025

Copy link
Copy Markdown
Member

he meant this

Add \CURLOPT_IN I FILESIZE_LARGE
...

you can amend this commit at some point, or the committer will take care of it no worries :)

@OskarStark

OskarStark commented Feb 1, 2025

Copy link
Copy Markdown
ContributorAuthor

Will do

@cmb69

cmb69 commented Feb 2, 2025

Copy link
Copy Markdown
Member

I don't think a test actually sending data using CURLOPT_INFILESIZE_LARGE makes much sense, but a test verifying the interoperability with CURLOPT_INFILESIZE may be reasonable. Does either affect the other (setopt vs getopt)? In case of using both, which takes preference – always the latter? Or does libcurl reject setting both options?

@OskarStark
OskarStarkforce-pushed the feature/CURLOPT_INFILESIZE_LARGE branch from e9ed9d9 to 26ec878CompareFebruary 3, 2025 07:33
@OskarStark

Copy link
Copy Markdown
ContributorAuthor

Please someone take over this PR if needed, I am not into C language and don't know how to test this @cmb69.

Thanks

@Ayesh

Ayesh commented Apr 8, 2025

Copy link
Copy Markdown
Member

Hi @OskarStark,
Thank you for the PR, and apologies for taking a loong time to review this.

The changes from the PR looks good to me. We can't merge this right now, because by the time you submitted the PR and now, the curl_arginfo.h file has changed, so merge conflicts. You can easily fix this by running php build/gen_stub.php while resolving the conflicts.

I have a PR against my php-src fork at Ayesh#28. Do you want to perhaps cherry-pick the commits there adding the tests and the UPGRADING entry?

Otherwise, I will come back to this in a few days and fix conflicts and merge this.

Thank you.

@AyeshAyesh self-assigned this Apr 8, 2025
This is my first PR on this repository and is based on:
* https://github.com/symfony/symfony/pull/59654/files#r1935358570
So feel free to close it :-)
@OskarStark
OskarStarkforce-pushed the feature/CURLOPT_INFILESIZE_LARGE branch from 26ec878 to fa32c75CompareApril 9, 2025 06:01
@OskarStark

Copy link
Copy Markdown
ContributorAuthor

We can't merge this right now, because by the time you submitted the PR and now, the curl_arginfo.h file has changed, so merge conflicts. You can easily fix this by running php build/gen_stub.php while resolving the conflicts.

I rebased and regenerated the stubs.

I would be grateful if you could add the tests while merging, thanks

@Ayesh

Ayesh commented Apr 9, 2025

Copy link
Copy Markdown
Member

I don't think a test actually sending data using CURLOPT_INFILESIZE_LARGE makes much sense, but a test verifying the interoperability with CURLOPT_INFILESIZE may be reasonable. Does either affect the other (setopt vs getopt)? In case of using both, which takes preference – always the latter? Or does libcurl reject setting both options?

Spot-on :)

CURLOPT_INFILESIZE and CURLOPT_INFILESIZE_LARGE seem to be nicely compatible. It accepts CURLOPT_INFILESIZE to set a file size, and CURLOPT_INFILESIZE_LARGE can unset or overwrite it. So replacing existing PHP code with CURLOPT_INFILESIZE_LARGE is safe too.

I added a test with Caddy to print the incoming Content-length header. The tests check whether the header is present, but not really upload a file 2 > GB.

Comment threadUPGRADING Outdated
@Ayesh
Ayeshforce-pushed the feature/CURLOPT_INFILESIZE_LARGE branch from 941a007 to 340166eCompareApril 9, 2025 06:26
@Ayesh
Ayeshforce-pushed the feature/CURLOPT_INFILESIZE_LARGE branch from 340166e to ab88ea3CompareApril 9, 2025 06:42
@Ayesh
Ayeshforce-pushed the feature/CURLOPT_INFILESIZE_LARGE branch from ab88ea3 to b629a73CompareApril 9, 2025 07:11
@Ayesh
Ayesh merged commit 895905b into php:masterApr 9, 2025
@OskarStark
OskarStark deleted the feature/CURLOPT_INFILESIZE_LARGE branch April 9, 2025 07:14
@OskarStark

Copy link
Copy Markdown
ContributorAuthor

Many thanks for the support on this PR 🎉

@Ayesh

Ayesh commented Apr 9, 2025

Copy link
Copy Markdown
Member

Thank you.

We have quite a few Curl options missing in ext-curl. You can see them by running php ext/curl/sync-constants.php | grep CURLOPT_. If there are any options that Symfony HTTP Client could make good use, I think we can try and add them to ext-curl.

@OskarStark

Copy link
Copy Markdown
ContributorAuthor

Good to know, thanks.

Right now I would say only add them when needed. WDYT @nicolas-grekas ?

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants

@OskarStark@devnexen@arnaud-lb@TimWolla@cmb69@Ayesh
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

[ext-curl] Add \CURLOPT_INFILESIZE_LARGE - #17637

Merged
Ayesh merged 3 commits into
php:masterfrom
OskarStark:feature/CURLOPT_INFILESIZE_LARGE
Apr 9, 2025
Merged

[ext-curl] Add \CURLOPT_INFILESIZE_LARGE#17637
Ayesh merged 3 commits into
php:masterfrom
OskarStark:feature/CURLOPT_INFILESIZE_LARGE

Conversation

@OskarStark

@OskarStarkOskarStark commented Jan 30, 2025

Copy link
Copy Markdown
Contributor

@OskarStark
OskarStarkforce-pushed the feature/CURLOPT_INFILESIZE_LARGE branch from 1637686 to 8678eadCompareJanuary 30, 2025 10:22
@OskarStarkOskarStark changed the title [ext-curl] Add à\CURLOPT_INIFILESIZE_LARGE`[ext-curl] Add \CURLOPT_INIFILESIZE_LARGEJan 30, 2025
@OskarStark
OskarStarkforce-pushed the feature/CURLOPT_INFILESIZE_LARGE branch from 8678ead to bbad36cCompareJanuary 30, 2025 10:22
Comment threadext/curl/interface.c Outdated
@devnexen

devnexen commented Jan 30, 2025

Copy link
Copy Markdown
Member

Two other things:

1/ you very likely edited curl_arginfo.h manually, I would suggest to revert this change locally and using build/gen_stub.php instead, i.e. php build/gen_stub.php ext/curl/curl.stub.php.
2/ Someone will very likely ask you to add a test before committing your change (i.e. ext/curl/tests for how they are made).

@devnexen
devnexen requested a review from AyeshJanuary 30, 2025 11:23
@OskarStark

Copy link
Copy Markdown
ContributorAuthor

1/ you very likely edited curl_arginfo.h manually, I would suggest to revert this change locally and using build/gen_stub.php instead, i.e. php build/gen_stub.php ext/curl/curl.stub.php.

done, thanks

@arnaud-lb

Copy link
Copy Markdown
Member

The existence of two distinct options CURLOPT_INFILESIZE and CURLOPT_INFILESIZE_LARGE is mostly due to low-level C considerations and I'm wondering if this distinction is useful/necessary in PHP. Are there cases where using CURLOPT_INFILESIZE_LARGE instead of CURLOPT_INFILESIZE would not behave as expected? Otherwise, should we define CURLOPT_INFILESIZE to @cvalue CURLOPT_INFILESIZE_LARGE directly?

@OskarStark

OskarStark commented Jan 30, 2025

Copy link
Copy Markdown
ContributorAuthor

I cannot answer this question, but maybe @nicolas-grekas can, but in the linked PR, we need to behave differently yes

@arnaud-lb

Copy link
Copy Markdown
Member

I'm seeing just now that we already expose other _LARGE constants, so my suggestion would create inconsistencies. Therefore it's probably better to just add CURLOPT_INFILESIZE_LARGE as you are suggesting.

@TimWollaTimWolla changed the title [ext-curl] Add \CURLOPT_INIFILESIZE_LARGE[ext-curl] Add \CURLOPT_INFILESIZE_LARGEJan 31, 2025
@TimWolla

Copy link
Copy Markdown
Member

FWIW: The title of the PR typoed the name of the constant, the same issue also exists in the commit message, so probably be careful when merging this.

@OskarStark

Copy link
Copy Markdown
ContributorAuthor

Hi @TimWolla can you explain? I can't see the typo

@devnexen

devnexen commented Feb 1, 2025

Copy link
Copy Markdown
Member

he meant this

Add \CURLOPT_IN I FILESIZE_LARGE
...

you can amend this commit at some point, or the committer will take care of it no worries :)

@OskarStark

OskarStark commented Feb 1, 2025

Copy link
Copy Markdown
ContributorAuthor

Will do

@cmb69

cmb69 commented Feb 2, 2025

Copy link
Copy Markdown
Member

I don't think a test actually sending data using CURLOPT_INFILESIZE_LARGE makes much sense, but a test verifying the interoperability with CURLOPT_INFILESIZE may be reasonable. Does either affect the other (setopt vs getopt)? In case of using both, which takes preference – always the latter? Or does libcurl reject setting both options?

@OskarStark
OskarStarkforce-pushed the feature/CURLOPT_INFILESIZE_LARGE branch from e9ed9d9 to 26ec878CompareFebruary 3, 2025 07:33
@OskarStark

Copy link
Copy Markdown
ContributorAuthor

Please someone take over this PR if needed, I am not into C language and don't know how to test this @cmb69.

Thanks

@Ayesh

Ayesh commented Apr 8, 2025

Copy link
Copy Markdown
Member

Hi @OskarStark,
Thank you for the PR, and apologies for taking a loong time to review this.

The changes from the PR looks good to me. We can't merge this right now, because by the time you submitted the PR and now, the curl_arginfo.h file has changed, so merge conflicts. You can easily fix this by running php build/gen_stub.php while resolving the conflicts.

I have a PR against my php-src fork at Ayesh#28. Do you want to perhaps cherry-pick the commits there adding the tests and the UPGRADING entry?

Otherwise, I will come back to this in a few days and fix conflicts and merge this.

Thank you.

@AyeshAyesh self-assigned this Apr 8, 2025
This is my first PR on this repository and is based on:
* https://github.com/symfony/symfony/pull/59654/files#r1935358570
So feel free to close it :-)
@OskarStark
OskarStarkforce-pushed the feature/CURLOPT_INFILESIZE_LARGE branch from 26ec878 to fa32c75CompareApril 9, 2025 06:01
@OskarStark

Copy link
Copy Markdown
ContributorAuthor

We can't merge this right now, because by the time you submitted the PR and now, the curl_arginfo.h file has changed, so merge conflicts. You can easily fix this by running php build/gen_stub.php while resolving the conflicts.

I rebased and regenerated the stubs.

I would be grateful if you could add the tests while merging, thanks

@Ayesh

Ayesh commented Apr 9, 2025

Copy link
Copy Markdown
Member

I don't think a test actually sending data using CURLOPT_INFILESIZE_LARGE makes much sense, but a test verifying the interoperability with CURLOPT_INFILESIZE may be reasonable. Does either affect the other (setopt vs getopt)? In case of using both, which takes preference – always the latter? Or does libcurl reject setting both options?

Spot-on :)

CURLOPT_INFILESIZE and CURLOPT_INFILESIZE_LARGE seem to be nicely compatible. It accepts CURLOPT_INFILESIZE to set a file size, and CURLOPT_INFILESIZE_LARGE can unset or overwrite it. So replacing existing PHP code with CURLOPT_INFILESIZE_LARGE is safe too.

I added a test with Caddy to print the incoming Content-length header. The tests check whether the header is present, but not really upload a file 2 > GB.

Comment threadUPGRADING Outdated
@Ayesh
Ayeshforce-pushed the feature/CURLOPT_INFILESIZE_LARGE branch from 941a007 to 340166eCompareApril 9, 2025 06:26
@Ayesh
Ayeshforce-pushed the feature/CURLOPT_INFILESIZE_LARGE branch from 340166e to ab88ea3CompareApril 9, 2025 06:42
@Ayesh
Ayeshforce-pushed the feature/CURLOPT_INFILESIZE_LARGE branch from ab88ea3 to b629a73CompareApril 9, 2025 07:11
@Ayesh
Ayesh merged commit 895905b into php:masterApr 9, 2025
@OskarStark
OskarStark deleted the feature/CURLOPT_INFILESIZE_LARGE branch April 9, 2025 07:14
@OskarStark

Copy link
Copy Markdown
ContributorAuthor

Many thanks for the support on this PR 🎉

@Ayesh

Ayesh commented Apr 9, 2025

Copy link
Copy Markdown
Member

Thank you.

We have quite a few Curl options missing in ext-curl. You can see them by running php ext/curl/sync-constants.php | grep CURLOPT_. If there are any options that Symfony HTTP Client could make good use, I think we can try and add them to ext-curl.

@OskarStark

Copy link
Copy Markdown
ContributorAuthor

Good to know, thanks.

Right now I would say only add them when needed. WDYT @nicolas-grekas ?

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants

@OskarStark@devnexen@arnaud-lb@TimWolla@cmb69@Ayesh
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

[ext-curl] Add \CURLOPT_INFILESIZE_LARGE - #17637

Merged
Ayesh merged 3 commits into
php:masterfrom
OskarStark:feature/CURLOPT_INFILESIZE_LARGE
Apr 9, 2025
Merged

[ext-curl] Add \CURLOPT_INFILESIZE_LARGE#17637
Ayesh merged 3 commits into
php:masterfrom
OskarStark:feature/CURLOPT_INFILESIZE_LARGE

Conversation

@OskarStark

@OskarStarkOskarStark commented Jan 30, 2025

Copy link
Copy Markdown
Contributor

@OskarStark
OskarStarkforce-pushed the feature/CURLOPT_INFILESIZE_LARGE branch from 1637686 to 8678eadCompareJanuary 30, 2025 10:22
@OskarStarkOskarStark changed the title [ext-curl] Add à\CURLOPT_INIFILESIZE_LARGE`[ext-curl] Add \CURLOPT_INIFILESIZE_LARGEJan 30, 2025
@OskarStark
OskarStarkforce-pushed the feature/CURLOPT_INFILESIZE_LARGE branch from 8678ead to bbad36cCompareJanuary 30, 2025 10:22
Comment threadext/curl/interface.c Outdated
@devnexen

devnexen commented Jan 30, 2025

Copy link
Copy Markdown
Member

Two other things:

1/ you very likely edited curl_arginfo.h manually, I would suggest to revert this change locally and using build/gen_stub.php instead, i.e. php build/gen_stub.php ext/curl/curl.stub.php.
2/ Someone will very likely ask you to add a test before committing your change (i.e. ext/curl/tests for how they are made).

@devnexen
devnexen requested a review from AyeshJanuary 30, 2025 11:23
@OskarStark

Copy link
Copy Markdown
ContributorAuthor

1/ you very likely edited curl_arginfo.h manually, I would suggest to revert this change locally and using build/gen_stub.php instead, i.e. php build/gen_stub.php ext/curl/curl.stub.php.

done, thanks

@arnaud-lb

Copy link
Copy Markdown
Member

The existence of two distinct options CURLOPT_INFILESIZE and CURLOPT_INFILESIZE_LARGE is mostly due to low-level C considerations and I'm wondering if this distinction is useful/necessary in PHP. Are there cases where using CURLOPT_INFILESIZE_LARGE instead of CURLOPT_INFILESIZE would not behave as expected? Otherwise, should we define CURLOPT_INFILESIZE to @cvalue CURLOPT_INFILESIZE_LARGE directly?

@OskarStark

OskarStark commented Jan 30, 2025

Copy link
Copy Markdown
ContributorAuthor

I cannot answer this question, but maybe @nicolas-grekas can, but in the linked PR, we need to behave differently yes

@arnaud-lb

Copy link
Copy Markdown
Member

I'm seeing just now that we already expose other _LARGE constants, so my suggestion would create inconsistencies. Therefore it's probably better to just add CURLOPT_INFILESIZE_LARGE as you are suggesting.

@TimWollaTimWolla changed the title [ext-curl] Add \CURLOPT_INIFILESIZE_LARGE[ext-curl] Add \CURLOPT_INFILESIZE_LARGEJan 31, 2025
@TimWolla

Copy link
Copy Markdown
Member

FWIW: The title of the PR typoed the name of the constant, the same issue also exists in the commit message, so probably be careful when merging this.

@OskarStark

Copy link
Copy Markdown
ContributorAuthor

Hi @TimWolla can you explain? I can't see the typo

@devnexen

devnexen commented Feb 1, 2025

Copy link
Copy Markdown
Member

he meant this

Add \CURLOPT_IN I FILESIZE_LARGE
...

you can amend this commit at some point, or the committer will take care of it no worries :)

@OskarStark

OskarStark commented Feb 1, 2025

Copy link
Copy Markdown
ContributorAuthor

Will do

@cmb69

cmb69 commented Feb 2, 2025

Copy link
Copy Markdown
Member

I don't think a test actually sending data using CURLOPT_INFILESIZE_LARGE makes much sense, but a test verifying the interoperability with CURLOPT_INFILESIZE may be reasonable. Does either affect the other (setopt vs getopt)? In case of using both, which takes preference – always the latter? Or does libcurl reject setting both options?

@OskarStark
OskarStarkforce-pushed the feature/CURLOPT_INFILESIZE_LARGE branch from e9ed9d9 to 26ec878CompareFebruary 3, 2025 07:33
@OskarStark

Copy link
Copy Markdown
ContributorAuthor

Please someone take over this PR if needed, I am not into C language and don't know how to test this @cmb69.

Thanks

@Ayesh

Ayesh commented Apr 8, 2025

Copy link
Copy Markdown
Member

Hi @OskarStark,
Thank you for the PR, and apologies for taking a loong time to review this.

The changes from the PR looks good to me. We can't merge this right now, because by the time you submitted the PR and now, the curl_arginfo.h file has changed, so merge conflicts. You can easily fix this by running php build/gen_stub.php while resolving the conflicts.

I have a PR against my php-src fork at Ayesh#28. Do you want to perhaps cherry-pick the commits there adding the tests and the UPGRADING entry?

Otherwise, I will come back to this in a few days and fix conflicts and merge this.

Thank you.

@AyeshAyesh self-assigned this Apr 8, 2025
This is my first PR on this repository and is based on:
* https://github.com/symfony/symfony/pull/59654/files#r1935358570
So feel free to close it :-)
@OskarStark
OskarStarkforce-pushed the feature/CURLOPT_INFILESIZE_LARGE branch from 26ec878 to fa32c75CompareApril 9, 2025 06:01
@OskarStark

Copy link
Copy Markdown
ContributorAuthor

We can't merge this right now, because by the time you submitted the PR and now, the curl_arginfo.h file has changed, so merge conflicts. You can easily fix this by running php build/gen_stub.php while resolving the conflicts.

I rebased and regenerated the stubs.

I would be grateful if you could add the tests while merging, thanks

@Ayesh

Ayesh commented Apr 9, 2025

Copy link
Copy Markdown
Member

I don't think a test actually sending data using CURLOPT_INFILESIZE_LARGE makes much sense, but a test verifying the interoperability with CURLOPT_INFILESIZE may be reasonable. Does either affect the other (setopt vs getopt)? In case of using both, which takes preference – always the latter? Or does libcurl reject setting both options?

Spot-on :)

CURLOPT_INFILESIZE and CURLOPT_INFILESIZE_LARGE seem to be nicely compatible. It accepts CURLOPT_INFILESIZE to set a file size, and CURLOPT_INFILESIZE_LARGE can unset or overwrite it. So replacing existing PHP code with CURLOPT_INFILESIZE_LARGE is safe too.

I added a test with Caddy to print the incoming Content-length header. The tests check whether the header is present, but not really upload a file 2 > GB.

Comment threadUPGRADING Outdated
@Ayesh
Ayeshforce-pushed the feature/CURLOPT_INFILESIZE_LARGE branch from 941a007 to 340166eCompareApril 9, 2025 06:26
@Ayesh
Ayeshforce-pushed the feature/CURLOPT_INFILESIZE_LARGE branch from 340166e to ab88ea3CompareApril 9, 2025 06:42
@Ayesh
Ayeshforce-pushed the feature/CURLOPT_INFILESIZE_LARGE branch from ab88ea3 to b629a73CompareApril 9, 2025 07:11
@Ayesh
Ayesh merged commit 895905b into php:masterApr 9, 2025
@OskarStark
OskarStark deleted the feature/CURLOPT_INFILESIZE_LARGE branch April 9, 2025 07:14
@OskarStark

Copy link
Copy Markdown
ContributorAuthor

Many thanks for the support on this PR 🎉

@Ayesh

Ayesh commented Apr 9, 2025

Copy link
Copy Markdown
Member

Thank you.

We have quite a few Curl options missing in ext-curl. You can see them by running php ext/curl/sync-constants.php | grep CURLOPT_. If there are any options that Symfony HTTP Client could make good use, I think we can try and add them to ext-curl.

@OskarStark

Copy link
Copy Markdown
ContributorAuthor

Good to know, thanks.

Right now I would say only add them when needed. WDYT @nicolas-grekas ?

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants

@OskarStark@devnexen@arnaud-lb@TimWolla@cmb69@Ayesh
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

[ext-curl] Add \CURLOPT_INFILESIZE_LARGE - #17637

Merged
Ayesh merged 3 commits into
php:masterfrom
OskarStark:feature/CURLOPT_INFILESIZE_LARGE
Apr 9, 2025
Merged

[ext-curl] Add \CURLOPT_INFILESIZE_LARGE#17637
Ayesh merged 3 commits into
php:masterfrom
OskarStark:feature/CURLOPT_INFILESIZE_LARGE

Conversation

@OskarStark

@OskarStarkOskarStark commented Jan 30, 2025

Copy link
Copy Markdown
Contributor

@OskarStark
OskarStarkforce-pushed the feature/CURLOPT_INFILESIZE_LARGE branch from 1637686 to 8678eadCompareJanuary 30, 2025 10:22
@OskarStarkOskarStark changed the title [ext-curl] Add à\CURLOPT_INIFILESIZE_LARGE`[ext-curl] Add \CURLOPT_INIFILESIZE_LARGEJan 30, 2025
@OskarStark
OskarStarkforce-pushed the feature/CURLOPT_INFILESIZE_LARGE branch from 8678ead to bbad36cCompareJanuary 30, 2025 10:22
Comment threadext/curl/interface.c Outdated
@devnexen

devnexen commented Jan 30, 2025

Copy link
Copy Markdown
Member

Two other things:

1/ you very likely edited curl_arginfo.h manually, I would suggest to revert this change locally and using build/gen_stub.php instead, i.e. php build/gen_stub.php ext/curl/curl.stub.php.
2/ Someone will very likely ask you to add a test before committing your change (i.e. ext/curl/tests for how they are made).

@devnexen
devnexen requested a review from AyeshJanuary 30, 2025 11:23
@OskarStark

Copy link
Copy Markdown
ContributorAuthor

1/ you very likely edited curl_arginfo.h manually, I would suggest to revert this change locally and using build/gen_stub.php instead, i.e. php build/gen_stub.php ext/curl/curl.stub.php.

done, thanks

@arnaud-lb

Copy link
Copy Markdown
Member

The existence of two distinct options CURLOPT_INFILESIZE and CURLOPT_INFILESIZE_LARGE is mostly due to low-level C considerations and I'm wondering if this distinction is useful/necessary in PHP. Are there cases where using CURLOPT_INFILESIZE_LARGE instead of CURLOPT_INFILESIZE would not behave as expected? Otherwise, should we define CURLOPT_INFILESIZE to @cvalue CURLOPT_INFILESIZE_LARGE directly?

@OskarStark

OskarStark commented Jan 30, 2025

Copy link
Copy Markdown
ContributorAuthor

I cannot answer this question, but maybe @nicolas-grekas can, but in the linked PR, we need to behave differently yes

@arnaud-lb

Copy link
Copy Markdown
Member

I'm seeing just now that we already expose other _LARGE constants, so my suggestion would create inconsistencies. Therefore it's probably better to just add CURLOPT_INFILESIZE_LARGE as you are suggesting.

@TimWollaTimWolla changed the title [ext-curl] Add \CURLOPT_INIFILESIZE_LARGE[ext-curl] Add \CURLOPT_INFILESIZE_LARGEJan 31, 2025
@TimWolla

Copy link
Copy Markdown
Member

FWIW: The title of the PR typoed the name of the constant, the same issue also exists in the commit message, so probably be careful when merging this.

@OskarStark

Copy link
Copy Markdown
ContributorAuthor

Hi @TimWolla can you explain? I can't see the typo

@devnexen

devnexen commented Feb 1, 2025

Copy link
Copy Markdown
Member

he meant this

Add \CURLOPT_IN I FILESIZE_LARGE
...

you can amend this commit at some point, or the committer will take care of it no worries :)

@OskarStark

OskarStark commented Feb 1, 2025

Copy link
Copy Markdown
ContributorAuthor

Will do

@cmb69

cmb69 commented Feb 2, 2025

Copy link
Copy Markdown
Member

I don't think a test actually sending data using CURLOPT_INFILESIZE_LARGE makes much sense, but a test verifying the interoperability with CURLOPT_INFILESIZE may be reasonable. Does either affect the other (setopt vs getopt)? In case of using both, which takes preference – always the latter? Or does libcurl reject setting both options?

@OskarStark
OskarStarkforce-pushed the feature/CURLOPT_INFILESIZE_LARGE branch from e9ed9d9 to 26ec878CompareFebruary 3, 2025 07:33
@OskarStark

Copy link
Copy Markdown
ContributorAuthor

Please someone take over this PR if needed, I am not into C language and don't know how to test this @cmb69.

Thanks

@Ayesh

Ayesh commented Apr 8, 2025

Copy link
Copy Markdown
Member

Hi @OskarStark,
Thank you for the PR, and apologies for taking a loong time to review this.

The changes from the PR looks good to me. We can't merge this right now, because by the time you submitted the PR and now, the curl_arginfo.h file has changed, so merge conflicts. You can easily fix this by running php build/gen_stub.php while resolving the conflicts.

I have a PR against my php-src fork at Ayesh#28. Do you want to perhaps cherry-pick the commits there adding the tests and the UPGRADING entry?

Otherwise, I will come back to this in a few days and fix conflicts and merge this.

Thank you.

@AyeshAyesh self-assigned this Apr 8, 2025
This is my first PR on this repository and is based on:
* https://github.com/symfony/symfony/pull/59654/files#r1935358570
So feel free to close it :-)
@OskarStark
OskarStarkforce-pushed the feature/CURLOPT_INFILESIZE_LARGE branch from 26ec878 to fa32c75CompareApril 9, 2025 06:01
@OskarStark

Copy link
Copy Markdown
ContributorAuthor

We can't merge this right now, because by the time you submitted the PR and now, the curl_arginfo.h file has changed, so merge conflicts. You can easily fix this by running php build/gen_stub.php while resolving the conflicts.

I rebased and regenerated the stubs.

I would be grateful if you could add the tests while merging, thanks

@Ayesh

Ayesh commented Apr 9, 2025

Copy link
Copy Markdown
Member

I don't think a test actually sending data using CURLOPT_INFILESIZE_LARGE makes much sense, but a test verifying the interoperability with CURLOPT_INFILESIZE may be reasonable. Does either affect the other (setopt vs getopt)? In case of using both, which takes preference – always the latter? Or does libcurl reject setting both options?

Spot-on :)

CURLOPT_INFILESIZE and CURLOPT_INFILESIZE_LARGE seem to be nicely compatible. It accepts CURLOPT_INFILESIZE to set a file size, and CURLOPT_INFILESIZE_LARGE can unset or overwrite it. So replacing existing PHP code with CURLOPT_INFILESIZE_LARGE is safe too.

I added a test with Caddy to print the incoming Content-length header. The tests check whether the header is present, but not really upload a file 2 > GB.

Comment threadUPGRADING Outdated
@Ayesh
Ayeshforce-pushed the feature/CURLOPT_INFILESIZE_LARGE branch from 941a007 to 340166eCompareApril 9, 2025 06:26
@Ayesh
Ayeshforce-pushed the feature/CURLOPT_INFILESIZE_LARGE branch from 340166e to ab88ea3CompareApril 9, 2025 06:42
@Ayesh
Ayeshforce-pushed the feature/CURLOPT_INFILESIZE_LARGE branch from ab88ea3 to b629a73CompareApril 9, 2025 07:11
@Ayesh
Ayesh merged commit 895905b into php:masterApr 9, 2025
@OskarStark
OskarStark deleted the feature/CURLOPT_INFILESIZE_LARGE branch April 9, 2025 07:14
@OskarStark

Copy link
Copy Markdown
ContributorAuthor

Many thanks for the support on this PR 🎉

@Ayesh

Ayesh commented Apr 9, 2025

Copy link
Copy Markdown
Member

Thank you.

We have quite a few Curl options missing in ext-curl. You can see them by running php ext/curl/sync-constants.php | grep CURLOPT_. If there are any options that Symfony HTTP Client could make good use, I think we can try and add them to ext-curl.

@OskarStark

Copy link
Copy Markdown
ContributorAuthor

Good to know, thanks.

Right now I would say only add them when needed. WDYT @nicolas-grekas ?

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants

@OskarStark@devnexen@arnaud-lb@TimWolla@cmb69@Ayesh
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

[ext-curl] Add \CURLOPT_INFILESIZE_LARGE - #17637

Merged
Ayesh merged 3 commits into
php:masterfrom
OskarStark:feature/CURLOPT_INFILESIZE_LARGE
Apr 9, 2025
Merged

[ext-curl] Add \CURLOPT_INFILESIZE_LARGE#17637
Ayesh merged 3 commits into
php:masterfrom
OskarStark:feature/CURLOPT_INFILESIZE_LARGE

Conversation

@OskarStark

@OskarStarkOskarStark commented Jan 30, 2025

Copy link
Copy Markdown
Contributor

@OskarStark
OskarStarkforce-pushed the feature/CURLOPT_INFILESIZE_LARGE branch from 1637686 to 8678eadCompareJanuary 30, 2025 10:22
@OskarStarkOskarStark changed the title [ext-curl] Add à\CURLOPT_INIFILESIZE_LARGE`[ext-curl] Add \CURLOPT_INIFILESIZE_LARGEJan 30, 2025
@OskarStark
OskarStarkforce-pushed the feature/CURLOPT_INFILESIZE_LARGE branch from 8678ead to bbad36cCompareJanuary 30, 2025 10:22
Comment threadext/curl/interface.c Outdated
@devnexen

devnexen commented Jan 30, 2025

Copy link
Copy Markdown
Member

Two other things:

1/ you very likely edited curl_arginfo.h manually, I would suggest to revert this change locally and using build/gen_stub.php instead, i.e. php build/gen_stub.php ext/curl/curl.stub.php.
2/ Someone will very likely ask you to add a test before committing your change (i.e. ext/curl/tests for how they are made).

@devnexen
devnexen requested a review from AyeshJanuary 30, 2025 11:23
@OskarStark

Copy link
Copy Markdown
ContributorAuthor

1/ you very likely edited curl_arginfo.h manually, I would suggest to revert this change locally and using build/gen_stub.php instead, i.e. php build/gen_stub.php ext/curl/curl.stub.php.

done, thanks

@arnaud-lb

Copy link
Copy Markdown
Member

The existence of two distinct options CURLOPT_INFILESIZE and CURLOPT_INFILESIZE_LARGE is mostly due to low-level C considerations and I'm wondering if this distinction is useful/necessary in PHP. Are there cases where using CURLOPT_INFILESIZE_LARGE instead of CURLOPT_INFILESIZE would not behave as expected? Otherwise, should we define CURLOPT_INFILESIZE to @cvalue CURLOPT_INFILESIZE_LARGE directly?

@OskarStark

OskarStark commented Jan 30, 2025

Copy link
Copy Markdown
ContributorAuthor

I cannot answer this question, but maybe @nicolas-grekas can, but in the linked PR, we need to behave differently yes

@arnaud-lb

Copy link
Copy Markdown
Member

I'm seeing just now that we already expose other _LARGE constants, so my suggestion would create inconsistencies. Therefore it's probably better to just add CURLOPT_INFILESIZE_LARGE as you are suggesting.

@TimWollaTimWolla changed the title [ext-curl] Add \CURLOPT_INIFILESIZE_LARGE[ext-curl] Add \CURLOPT_INFILESIZE_LARGEJan 31, 2025
@TimWolla

Copy link
Copy Markdown
Member

FWIW: The title of the PR typoed the name of the constant, the same issue also exists in the commit message, so probably be careful when merging this.

@OskarStark

Copy link
Copy Markdown
ContributorAuthor

Hi @TimWolla can you explain? I can't see the typo

@devnexen

devnexen commented Feb 1, 2025

Copy link
Copy Markdown
Member

he meant this

Add \CURLOPT_IN I FILESIZE_LARGE
...

you can amend this commit at some point, or the committer will take care of it no worries :)

@OskarStark

OskarStark commented Feb 1, 2025

Copy link
Copy Markdown
ContributorAuthor

Will do

@cmb69

cmb69 commented Feb 2, 2025

Copy link
Copy Markdown
Member

I don't think a test actually sending data using CURLOPT_INFILESIZE_LARGE makes much sense, but a test verifying the interoperability with CURLOPT_INFILESIZE may be reasonable. Does either affect the other (setopt vs getopt)? In case of using both, which takes preference – always the latter? Or does libcurl reject setting both options?

@OskarStark
OskarStarkforce-pushed the feature/CURLOPT_INFILESIZE_LARGE branch from e9ed9d9 to 26ec878CompareFebruary 3, 2025 07:33
@OskarStark

Copy link
Copy Markdown
ContributorAuthor

Please someone take over this PR if needed, I am not into C language and don't know how to test this @cmb69.

Thanks

@Ayesh

Ayesh commented Apr 8, 2025

Copy link
Copy Markdown
Member

Hi @OskarStark,
Thank you for the PR, and apologies for taking a loong time to review this.

The changes from the PR looks good to me. We can't merge this right now, because by the time you submitted the PR and now, the curl_arginfo.h file has changed, so merge conflicts. You can easily fix this by running php build/gen_stub.php while resolving the conflicts.

I have a PR against my php-src fork at Ayesh#28. Do you want to perhaps cherry-pick the commits there adding the tests and the UPGRADING entry?

Otherwise, I will come back to this in a few days and fix conflicts and merge this.

Thank you.

@AyeshAyesh self-assigned this Apr 8, 2025
This is my first PR on this repository and is based on:
* https://github.com/symfony/symfony/pull/59654/files#r1935358570
So feel free to close it :-)
@OskarStark
OskarStarkforce-pushed the feature/CURLOPT_INFILESIZE_LARGE branch from 26ec878 to fa32c75CompareApril 9, 2025 06:01
@OskarStark

Copy link
Copy Markdown
ContributorAuthor

We can't merge this right now, because by the time you submitted the PR and now, the curl_arginfo.h file has changed, so merge conflicts. You can easily fix this by running php build/gen_stub.php while resolving the conflicts.

I rebased and regenerated the stubs.

I would be grateful if you could add the tests while merging, thanks

@Ayesh

Ayesh commented Apr 9, 2025

Copy link
Copy Markdown
Member

I don't think a test actually sending data using CURLOPT_INFILESIZE_LARGE makes much sense, but a test verifying the interoperability with CURLOPT_INFILESIZE may be reasonable. Does either affect the other (setopt vs getopt)? In case of using both, which takes preference – always the latter? Or does libcurl reject setting both options?

Spot-on :)

CURLOPT_INFILESIZE and CURLOPT_INFILESIZE_LARGE seem to be nicely compatible. It accepts CURLOPT_INFILESIZE to set a file size, and CURLOPT_INFILESIZE_LARGE can unset or overwrite it. So replacing existing PHP code with CURLOPT_INFILESIZE_LARGE is safe too.

I added a test with Caddy to print the incoming Content-length header. The tests check whether the header is present, but not really upload a file 2 > GB.

Comment threadUPGRADING Outdated
@Ayesh
Ayeshforce-pushed the feature/CURLOPT_INFILESIZE_LARGE branch from 941a007 to 340166eCompareApril 9, 2025 06:26
@Ayesh
Ayeshforce-pushed the feature/CURLOPT_INFILESIZE_LARGE branch from 340166e to ab88ea3CompareApril 9, 2025 06:42
@Ayesh
Ayeshforce-pushed the feature/CURLOPT_INFILESIZE_LARGE branch from ab88ea3 to b629a73CompareApril 9, 2025 07:11
@Ayesh
Ayesh merged commit 895905b into php:masterApr 9, 2025
@OskarStark
OskarStark deleted the feature/CURLOPT_INFILESIZE_LARGE branch April 9, 2025 07:14
@OskarStark

Copy link
Copy Markdown
ContributorAuthor

Many thanks for the support on this PR 🎉

@Ayesh

Ayesh commented Apr 9, 2025

Copy link
Copy Markdown
Member

Thank you.

We have quite a few Curl options missing in ext-curl. You can see them by running php ext/curl/sync-constants.php | grep CURLOPT_. If there are any options that Symfony HTTP Client could make good use, I think we can try and add them to ext-curl.

@OskarStark

Copy link
Copy Markdown
ContributorAuthor

Good to know, thanks.

Right now I would say only add them when needed. WDYT @nicolas-grekas ?

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants

@OskarStark@devnexen@arnaud-lb@TimWolla@cmb69@Ayesh
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

[ext-curl] Add \CURLOPT_INFILESIZE_LARGE - #17637

Merged
Ayesh merged 3 commits into
php:masterfrom
OskarStark:feature/CURLOPT_INFILESIZE_LARGE
Apr 9, 2025
Merged

[ext-curl] Add \CURLOPT_INFILESIZE_LARGE#17637
Ayesh merged 3 commits into
php:masterfrom
OskarStark:feature/CURLOPT_INFILESIZE_LARGE

Conversation

@OskarStark

@OskarStarkOskarStark commented Jan 30, 2025

Copy link
Copy Markdown
Contributor

@OskarStark
OskarStarkforce-pushed the feature/CURLOPT_INFILESIZE_LARGE branch from 1637686 to 8678eadCompareJanuary 30, 2025 10:22
@OskarStarkOskarStark changed the title [ext-curl] Add à\CURLOPT_INIFILESIZE_LARGE`[ext-curl] Add \CURLOPT_INIFILESIZE_LARGEJan 30, 2025
@OskarStark
OskarStarkforce-pushed the feature/CURLOPT_INFILESIZE_LARGE branch from 8678ead to bbad36cCompareJanuary 30, 2025 10:22
Comment threadext/curl/interface.c Outdated
@devnexen

devnexen commented Jan 30, 2025

Copy link
Copy Markdown
Member

Two other things:

1/ you very likely edited curl_arginfo.h manually, I would suggest to revert this change locally and using build/gen_stub.php instead, i.e. php build/gen_stub.php ext/curl/curl.stub.php.
2/ Someone will very likely ask you to add a test before committing your change (i.e. ext/curl/tests for how they are made).

@devnexen
devnexen requested a review from AyeshJanuary 30, 2025 11:23
@OskarStark

Copy link
Copy Markdown
ContributorAuthor

1/ you very likely edited curl_arginfo.h manually, I would suggest to revert this change locally and using build/gen_stub.php instead, i.e. php build/gen_stub.php ext/curl/curl.stub.php.

done, thanks

@arnaud-lb

Copy link
Copy Markdown
Member

The existence of two distinct options CURLOPT_INFILESIZE and CURLOPT_INFILESIZE_LARGE is mostly due to low-level C considerations and I'm wondering if this distinction is useful/necessary in PHP. Are there cases where using CURLOPT_INFILESIZE_LARGE instead of CURLOPT_INFILESIZE would not behave as expected? Otherwise, should we define CURLOPT_INFILESIZE to @cvalue CURLOPT_INFILESIZE_LARGE directly?

@OskarStark

OskarStark commented Jan 30, 2025

Copy link
Copy Markdown
ContributorAuthor

I cannot answer this question, but maybe @nicolas-grekas can, but in the linked PR, we need to behave differently yes

@arnaud-lb

Copy link
Copy Markdown
Member

I'm seeing just now that we already expose other _LARGE constants, so my suggestion would create inconsistencies. Therefore it's probably better to just add CURLOPT_INFILESIZE_LARGE as you are suggesting.

@TimWollaTimWolla changed the title [ext-curl] Add \CURLOPT_INIFILESIZE_LARGE[ext-curl] Add \CURLOPT_INFILESIZE_LARGEJan 31, 2025
@TimWolla

Copy link
Copy Markdown
Member

FWIW: The title of the PR typoed the name of the constant, the same issue also exists in the commit message, so probably be careful when merging this.

@OskarStark

Copy link
Copy Markdown
ContributorAuthor

Hi @TimWolla can you explain? I can't see the typo

@devnexen

devnexen commented Feb 1, 2025

Copy link
Copy Markdown
Member

he meant this

Add \CURLOPT_IN I FILESIZE_LARGE
...

you can amend this commit at some point, or the committer will take care of it no worries :)

@OskarStark

OskarStark commented Feb 1, 2025

Copy link
Copy Markdown
ContributorAuthor

Will do

@cmb69

cmb69 commented Feb 2, 2025

Copy link
Copy Markdown
Member

I don't think a test actually sending data using CURLOPT_INFILESIZE_LARGE makes much sense, but a test verifying the interoperability with CURLOPT_INFILESIZE may be reasonable. Does either affect the other (setopt vs getopt)? In case of using both, which takes preference – always the latter? Or does libcurl reject setting both options?

@OskarStark
OskarStarkforce-pushed the feature/CURLOPT_INFILESIZE_LARGE branch from e9ed9d9 to 26ec878CompareFebruary 3, 2025 07:33
@OskarStark

Copy link
Copy Markdown
ContributorAuthor

Please someone take over this PR if needed, I am not into C language and don't know how to test this @cmb69.

Thanks

@Ayesh

Ayesh commented Apr 8, 2025

Copy link
Copy Markdown
Member

Hi @OskarStark,
Thank you for the PR, and apologies for taking a loong time to review this.

The changes from the PR looks good to me. We can't merge this right now, because by the time you submitted the PR and now, the curl_arginfo.h file has changed, so merge conflicts. You can easily fix this by running php build/gen_stub.php while resolving the conflicts.

I have a PR against my php-src fork at Ayesh#28. Do you want to perhaps cherry-pick the commits there adding the tests and the UPGRADING entry?

Otherwise, I will come back to this in a few days and fix conflicts and merge this.

Thank you.

@AyeshAyesh self-assigned this Apr 8, 2025
This is my first PR on this repository and is based on:
* https://github.com/symfony/symfony/pull/59654/files#r1935358570
So feel free to close it :-)
@OskarStark
OskarStarkforce-pushed the feature/CURLOPT_INFILESIZE_LARGE branch from 26ec878 to fa32c75CompareApril 9, 2025 06:01
@OskarStark

Copy link
Copy Markdown
ContributorAuthor

We can't merge this right now, because by the time you submitted the PR and now, the curl_arginfo.h file has changed, so merge conflicts. You can easily fix this by running php build/gen_stub.php while resolving the conflicts.

I rebased and regenerated the stubs.

I would be grateful if you could add the tests while merging, thanks

@Ayesh

Ayesh commented Apr 9, 2025

Copy link
Copy Markdown
Member

I don't think a test actually sending data using CURLOPT_INFILESIZE_LARGE makes much sense, but a test verifying the interoperability with CURLOPT_INFILESIZE may be reasonable. Does either affect the other (setopt vs getopt)? In case of using both, which takes preference – always the latter? Or does libcurl reject setting both options?

Spot-on :)

CURLOPT_INFILESIZE and CURLOPT_INFILESIZE_LARGE seem to be nicely compatible. It accepts CURLOPT_INFILESIZE to set a file size, and CURLOPT_INFILESIZE_LARGE can unset or overwrite it. So replacing existing PHP code with CURLOPT_INFILESIZE_LARGE is safe too.

I added a test with Caddy to print the incoming Content-length header. The tests check whether the header is present, but not really upload a file 2 > GB.

Comment threadUPGRADING Outdated
@Ayesh
Ayeshforce-pushed the feature/CURLOPT_INFILESIZE_LARGE branch from 941a007 to 340166eCompareApril 9, 2025 06:26
@Ayesh
Ayeshforce-pushed the feature/CURLOPT_INFILESIZE_LARGE branch from 340166e to ab88ea3CompareApril 9, 2025 06:42
@Ayesh
Ayeshforce-pushed the feature/CURLOPT_INFILESIZE_LARGE branch from ab88ea3 to b629a73CompareApril 9, 2025 07:11
@Ayesh
Ayesh merged commit 895905b into php:masterApr 9, 2025
@OskarStark
OskarStark deleted the feature/CURLOPT_INFILESIZE_LARGE branch April 9, 2025 07:14
@OskarStark

Copy link
Copy Markdown
ContributorAuthor

Many thanks for the support on this PR 🎉

@Ayesh

Ayesh commented Apr 9, 2025

Copy link
Copy Markdown
Member

Thank you.

We have quite a few Curl options missing in ext-curl. You can see them by running php ext/curl/sync-constants.php | grep CURLOPT_. If there are any options that Symfony HTTP Client could make good use, I think we can try and add them to ext-curl.

@OskarStark

Copy link
Copy Markdown
ContributorAuthor

Good to know, thanks.

Right now I would say only add them when needed. WDYT @nicolas-grekas ?

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants

@OskarStark@devnexen@arnaud-lb@TimWolla@cmb69@Ayesh