Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

CI3 and PHP8.1(ctype_digit(): Argument of type int will be interpreted as string in the future) #6285

Open
Obata2024 opened this issue Jun 26, 2024 · 5 comments · May be fixed by #6289
Open

Comments

@Obata2024
Copy link

When trying to use PostgreSQL under the given conditions, the following error occurs:

A PHP Error was encountered
Severity: 8192

Message: ctype_digit(): Argument of type int will be interpreted as string in the future

Filename: postgre/postgre_driver.php

Line Number: 98

Should I modify the postgre/postgre_driver.php file to resolve this? If it’s acceptable, I can submit a PR.

Also, has anyone resolved the same issue using an override?
I attempted to create a custom class under the application/core directory to override it, but this error still persists.

@jamieburchell
Copy link
Contributor

jamieburchell commented Jun 30, 2024

Looks to me that the ctype part of that if statement should just be removed. As far as I can see so far none of the other drivers check anything other than that the value isn't empty before using it.

@daveherman71
Copy link

Removing the check might have unintended consequences so a better approach would be to simply cast the variable as a string which is done pretty much everywhere else in the framework.

Change line 98 in the file to read:

if ( ! empty($this->port) && ctype_digit((string) $this->port))

@jamieburchell
Copy link
Contributor

jamieburchell commented Jul 11, 2024

Removing the check might have unintended consequences so a better approach would be to simply cast the variable as a string which is done pretty much everywhere else in the framework.

It's inconsistently checked in each database driver. Most just check if the port is not empty. In this case, it's just to find out if the port number is not empty. If casting to a string, this should also be applied elsewhere such as here and here.

@daveherman71
Copy link

@jamieburchell
Copy link
Contributor

jamieburchell commented Jul 15, 2024

The thing is, in some of these cases the variable is expected to be a string and not an int, for example in the valid_url function. The lack of type hinting on the method parameters is biting us here.

Either way, the simplest fix here is casting. I'll open a PR later and add it to my fork.

@jamieburchell jamieburchell linked a pull request Jul 15, 2024 that will close this issue
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging a pull request may close this issue.

3 participants