Make WordPress Core

Opened 10 months ago

Closed 10 months ago

Last modified 10 months ago

#48075 closed task (blessed) (fixed)

Remove conditional use of PHP realpath()

Reported by: jrf Owned by: SergeyBiryukov
Milestone: 5.3 Priority: normal
Severity: normal Version: 5.3
Component: General Keywords: has-patch
Focuses: performance, coding-standards Cc:


While working on #48074 / looking for code which can be removed now support for PHP < 5.6.20 has been dropped, I came across two instances of conditional use of the realpath() function.

        if ( function_exists( 'realpath' ) ) {
                $path = realpath( $path );

Now, there are only two reasons I can think for this code to exist:

  1. Support for PHP < 4.

The `realpath()` function was introduced in PHP 4.0.0. It might be that this code is so ancient that it is from before that time.
I've tried to trace this back, but got stuck somewhere in 2009.

  1. Hosts disabling the function using the `disabled_functions` ini directive.

I honestly don't know if that's a thing and it would be pretty foolish (of hosts) if they did, but that's the only other reason I could think of for this code to exist.

It would be great if someone with a long memory could chime in here.

If the reason is 1), the removal of these conditions is long overdue.

If the reason is 2), based on a quick scan, there are 27 more instances within WP where realpath() is used without a function_exists() check.

I'm presuming, for now, that the reason is 1) and am attaching a patch to remove the condition.

If by some happenstance, the reason for this code would turn out to be 2), a new patch would need to be created to add the condition to the other 27 instance of realpath() in core (or better yet a wp_realpath() function or similar should be added instead).

Attachments (2)

48075-src-Remove-work-arounds-for-realpath.patch (1.4 KB) - added by jrf 10 months ago.
48075.1.patch (457 bytes) - added by dkarfa 10 months ago.

Download all attachments as: .zip

Change History (7)

10 months ago

#1 @dkarfa
10 months ago

Kindly ignore my last patch.

Last edited 10 months ago by dkarfa (previous) (diff)

#2 @netweb
10 months ago

  • Milestone changed from Awaiting Review to Future Release

#3 @SergeyBiryukov
10 months ago

  • Milestone changed from Future Release to 5.3

#4 @SergeyBiryukov
10 months ago

  • Resolution set to fixed
  • Status changed from assigned to closed

In 46210:

Code Modernization: Remove conditional use of PHP realpath().

The realpath() function was introduced in PHP 4.0.0. There's no point in checking if the function exists in PHP 5.6+, in only 2 instances out of 29.

Props jrf.
Fixes #48075.

#5 @jrf
10 months ago

Thanks @SergeyBiryukov !

Note: See TracTickets for help on using tickets.