Jump to content

Replace function value depending on what's after function


crashwave

Recommended Posts

Hello all

I need your help with a code we are rewriting/updating

files are scattered amongst several folders, one folder is the main folder (original). all folders have the same folder structure and most having identical file NAMES as the main folder. Those with identical file names are NOT, usually, the same file; they have been edited by the owner of that folder. Think of it like git master/original and forks/branches.

 

the code we have accesses files in EITHER the main folder or the 'forks' using a function that returns the directory like this

main_folder().'filepath'; OR
fork_folder().'filepath';

or at times like this 

<?php echo main_folder(); ?>filepath

what I need is to change main_folder() to equal fork_folder() but only if 'filepath' exists in that folder, if it doesn't then main_folder() does not change.

 

So essentially whenever main_folder() is called I need to find what comes after it

; ?> Or ;?> OR .'

get the file that follows, IF ANY, figure out if it exists in fork and change main_folder() or not.

 

It was suggested to me that the only way to do this is to incorporate js in the code. But there has to be a completely php way do this.

 

it would have been much easier if main_folder() and fork_folder() were changed to main_folder('filepath')  fork_folder('filepath') but that is not an option.

 

Thanks for any input.

Edited by crashwave
Link to comment
Share on other sites

yes denno020, but how do I get the file to begin with to check if it exists. That is main, 1st hurdle.

 

I need main_folder().'filepath';  to be changed to fork_folder().'filepath'whenever main_folder() is called in the code which is outside the folders.

I have it working if I specify filepath using

function hme_url($file) {
        $file = ltrim( $file, '/' );

        if ( empty( $file ) || ( false !== strpos( $file, '..' ) ) ) { //???
                $url = trailingslashit(main_folder());//main or fork
        } elseif (forks_avail() && file_exists( trailingslashit( fork_folder() ) . $file ) ) {
                $url = trailingslashit( fork_folder() );
        } else {
                $url = trailingslashit( main_folder() );
        }

        return $url.$file ;
}

can be prob written better with globals and change main_folder() in the function but that isn't the main issue. Getting the $file part that is after the main_folder() request is the problem. Then I have to deal with going back after getting $file and replacing the whole string with fork_folder(). $file. figuring out if it exists is the easy part.

Link to comment
Share on other sites

Nothing can be written better with globals.

 

I need main_folder().'filepath';  to be changed to fork_folder().'filepath'whenever main_folder() is called in the code which is outside the folders.

 

Does this mean that if main_folder() is called in a php file that is not inside a fork_folder directory, you want main_folder() to be replaced with fork_folder()?

 

If that's the case, then you could use __DIR__ to find out the absolute path of the current PHP file, then search the path for a folder that you would expect to find in a fork_folder file, if it's not there, then that mean's you're not currently in one of the fork_folders, so switch main_folder() to fork_folder(), like:

$currentDir = __DIR__;
if (preg_match("/fork_folder_name/", $currentDir)) {
  fork_folder();
} else {
  main_folder();
}
Edited by denno020
Link to comment
Share on other sites

Thanks for reply.

Yes most of the code is outside the folders but not fork_folder either.

I haven't used Joomla/Wordpress in a while but I think it could be considered similar to their module/template structure.

say the main code requests the module folder file, but there are forks/children of the module with changes. they are not totally duplicates of the module just change a few things in it. The easiest thing is say an image.

wordpress I think sees the main_module and gets it's files. say it calls $main_folder./image.png but I want it to get $fork_folder./image.png instead if that one exists.

But the way it is written in the main code is the problem 

I cannot figure out how to get the filename because it's usually echo/return/include main_folder() . 'filename'

Link to comment
Share on other sites

I'm struggling to follow exactly what you want here..

 

You keep saying about using a file from fork_folder if it exists, which keeps leading me back to using file_exists().. Like this:

 

 

if (file_exists($fork_folder."/image.jpg")) {
  include/echo/return $fork_folder."/image.jpg";
} else {
  include/echo/return $main_folder."/image.jpg";
}

 

If this isn't what you're after, then you'll have to try and explain the problem a bit better, because as I said, I'm struggling to follow exactly what you want..

Link to comment
Share on other sites

Yes exactly but I do not know the file is /image.jpg until after main_folder()."/image.jpg" is already requested.

 

the way the code is 

echo '<img src="'. main_folder() . '/image.jpg">'; 

but it could be anything /file.pdf,  anotherphp.php

 

How do I get the file that is requested after main_folder() function to figure out if that file exists in fork_folder. doing a file exists is easy if I knew what file it's looking for at the time.

Link to comment
Share on other sites

This thread is more than a year old. Please don't revive it unless you have something important to add.

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.