0

P.S i know title sucks but i couldn't think of an appropriate title to explain this:(
Well i tried to think over this matter for days but couldn't found the logic of how it is done, so i guess only you guys can help me understand this

some of you may have notice that some image hosting give different version of uploaded images

Examples:
http://www.site.com/images/picname.png -->This is direct link to image
http://www.site.com/view/picname.png --->This one IS EXACTLY the page you get when u just upload an image(i.e other links like bb code displayed + preview of image).Thus if i put advertisements on this page , they will appear on every page

My question is how is this done in php
Some points to be noted
1.Image is not uploaded 2 times, wastage of memory and space so not feasible
2.It not temporary , like i can change picname.png to any picture name stored on server and it will load exactly as if i just uploaded the image and show me the directly link to image + other versions as well

How is this done , help me understand
Want to implement something similar:D

5
Contributors
29
Replies
30
Views
5 Years
Discussion Span
Last Post by Khav
Featured Replies
  • It would have been helpful if you could have posted the link to the actual example earlier. So instead of what I posted before, you could use: RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule view/(.*) view.php?image=$1 [L] Where view.php contains: <?php $image = isset($_GET['image']) ? $_GET['image'] : false; // Check … Read More

  • A screenshot isn't helpful. It doesn't show any source code. If you're seeking help on a public forum, you're going to need to post some code. Otherwise we can only speculate as to the issue. If you want *private* help, I'd suggest you hire a developer. Read More

  • Okay, so we've established that the $_GET parameter isn't being passed through. I've had a go at recreating this issue in my own development environment and encountered the same problem when when I had MultiViews enabled. > The effect of MultiViews is as follows: if the server receives a request … Read More

0

view/picname.png is either a htaccess rewrite to another PHP script showing the picture in it's page, or view is the actual script and the picture is the parameter.

0

not htaccess redirect for sure as view/picname.png would IS not redirected to images.picname.png
view is Not the script as well as after upload url become site.com/upload.php
view/picname.png is the exact copy of upload.php @time of upload

0

not htaccess redirect for sure as view/picname.png would IS not redirected to images.picname.png

It doesn't have to be a visible redirection (to you).

0

Can u show an example of a hidden redirection
Kind of loss here

0

Rewrite is not the same as redirect. Will post an example later unless somebody else does so first.

0

I am waiting for your example diafol dude
You rock

Also in case you allow me , can i pm me a site url that uses the system that i am talking about:)

0

The site is probably using something like this:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule view/(.*) images/$1 [L]
0

No Guys i think you are not understanding what i mean
Here is a live example
http://lulzimg.com/view/45b0e107d6.jpg
Click on it and check for yourself
This way the guy can put ads on the links that have "/view/"
Direct link is http://i3.lulzimg.com/45b0e107d6.jpg
Huge difference:P
(ignore i3 in direct link)
I want a similar structure for my site
Peace and thanks for showing interest

Edited by Khav: added info

2

It would have been helpful if you could have posted the link to the actual example earlier.

So instead of what I posted before, you could use:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule view/(.*) view.php?image=$1 [L]

Where view.php contains:

<?php
$image = isset($_GET['image']) ? $_GET['image'] : false;

// Check image exists
if(! file_exists("images/{$image}")) {
    // Return 404 - image doesn't exist
}
?>
<html>
    <head></head>
    <body>
        <!-- various page elements -->

        <img src="images/<?php echo $image; ?>" alt="Image title" />

        <!-- various other page elements -->
    </body>
</html>
0

@blocblue
Thanks so much for quick response

Where do i have to put this , in my parent directory or in images folder or in "view" folder.Ofc i know its a .htaccess file but i get 500 internal server error.Most probably i am putting in wrong location

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule view/(.*) view.php?image=$1 [L]

Take note that view is A directory in the example
Shall i create a folder "view" and then put the code below(i.e in index.php in view folder

<?php
$image = isset($_GET['image']) ? $_GET['image'] : false;
// Check image exists
if(! file_exists("images/{$image}")) {
    // Return 404 - image doesn't exist
}
?>
<html>
    <head></head>
    <body>
        <!-- various page elements -->
        <img src="images/<?php echo $image; ?>" alt="Image title" />
        <!-- various other page elements -->
    </body>
</html>

Please clarify your response
Much appreciated
Peace

Edited by Khav: added more info

0

If you haven't already, you will need to enable the Rewrite Engine and set the Rewrite Base - see below. If this still fails, please post the relevant errors from your error log.

RewriteEngine on
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule view/(.*) view.php?image=$1 [L]

The PHP file, view.php, should be placed in the root directory of your website. The appearance of the view sub-directory is achieved by the rewrite rule.

0

Do you have a publicly accessible example?

You say picname.jpg doesn't load. Does it 404?

Can you outline the directory and file structure for your website?

Can you post your code?

0

Does it 404?
Well i don't get 404 not found message but i get the icon of a corrupted image
Like this
http://gyazo.com/783ff1f52d0d3dfad7ba21b534c92916
Outline of directory structure
Images are stored in "images" folder
I am using appserv on windows atm
Can i post my code?
No its not possible coz i will be using for production.However i can let you view it via teamviewer

2

A screenshot isn't helpful. It doesn't show any source code.

If you're seeking help on a public forum, you're going to need to post some code. Otherwise we can only speculate as to the issue.

If you want private help, I'd suggest you hire a developer.

0

The view.php is exactly as you given me above
I haven't added any other page element
Once image get loaded , i will add others
html source

<html>

    <head></head>

    <body>

        <!-- various page elements -->

        <img src="images/" alt="Image title" />

        <!-- various other page elements -->

    </body>

</html>

How i am doing things?
suppose i want to view a pic like blocbluerocks.jpg
i Enter
http://localhost/fileupload/view/images/blocbluerocks.jpg as url and blocbluerocks.jpg should load
then later i can add other page elements

0

The content of view.php should be as follows. Your snippet is missing all PHP source code.

<?php
$image = isset($_GET['image']) ? $_GET['image'] : false;
// Check image exists
if(! file_exists("images/{$image}")) {
    // Return 404 - image doesn't exist
}
?>
<html>
    <head></head>
    <body>
        <!-- various page elements -->
        <img src="images/<?php echo $image; ?>" alt="Image title" />
        <!-- various other page elements -->
    </body>
</html>

Also, the redirect rule is set to work when visiting the URL:
http://site.com/view/example.jpg
NOT
http://site.com/view/images/example.jpg

As the latter would rewrite the image URL to be:
http://site.com/images/images/example.jpg

If you post details outlining your directory struture, that would help. As would knowing the source URL for the missing image.

0

So can you confirm if your directory structure is:

/
    fileupload/
        .htaccess
        view.php
        images/
            example.jpg

Can you also confirm that your view.php script matches what I have in my last post?

And you said that when viewing http://site.com/images/example.jpg the image didn't display. If you view your source code, what is the value of the image source attribute?

0

yes i confirm my directory structure is same as you shown above
My view.php is EXACTLY like yours
I repeat dude everything is same as you posted , so the question of a different view.php doesn't arise
I wonder what is wrong

0

I think either me or you are confused:D
http://site.com/images/example.jpg
Loads fines , it just show the image and that's all(Perfect) - No source here , just an image,No problem @all:D

When i view source of
http://site.com/view/example.jpg( That's the problem)
i get

<html>
    <head></head>
    <body>
        <!-- various page elements -->
        <img src="images/" alt="Image title" />
        <!-- various other page elements -->
    </body>
</html>

This implies that it is the source of view.php
Now the source of view.php is exactly as yours

Read below , that's all what i need to do
Problem is that example.jpg Don't enter the

<img src="images/" alt="Image title" />
To become

<img src="images/example.jpg" alt="Image title" />
I appreciate the amount of time you are putting for this
i struggle with this feature for days

Are you sure that the first line in view is good
What is needed here is as follows
Suppose user navigates
http://site.com/view/example.jpg
The view.php extract part of url after /view/(i.e example.jpg)
Then stores it in a variable($image in our case)
Then echo it in <img src=/> tags
Done

0

I'm not confused. I am trying to persevere and find the issue without being able to see the complete source code.

And to be fair, it's like getting blood from a stone with answers to questions.

Yes, the value of $image isn't being output. That is why I wanted to know what the value of the src attribute was so that I could ascertain whether you had made a typo when posting the code previously (you posted the rendered code, not the original source code).

So, the question is - why is $image empty?

Can you add the following to the top of view.php:

echo '<pre>'; var_dump($_GET); echo '</pre>'; die;

And also post the entire content of the .htaccess file again...

0

Full View.php(Its my full source code dude)

<?php
$image = isset($_GET['image']) ? $_GET['image'] : false;
echo '<pre>'; var_dump($_GET); echo '</pre>'; die;
// Check image exists
if(! file_exists("images/{$image}")) {
    // Return 404 - image doesn't exist
}
?>
<html>
    <head></head>
    <body>
        <!-- various page elements -->
        <img src="images/<?php echo $image; ?>" alt="Image title" />
        <!-- various other page elements -->
    </body>
</html>

Full .htaccess

RewriteEngine on
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule view/(.*) view.php?image=$1 [L]

Result of

echo '<pre>'; var_dump($_GET); echo '</pre>'; die;

array(0) {
}
2

Okay, so we've established that the $_GET parameter isn't being passed through.

I've had a go at recreating this issue in my own development environment and encountered the same problem when when I had MultiViews enabled.

The effect of MultiViews is as follows: if the server receives a request for /some/dir/foo, if /some/dir has MultiViews enabled, and /some/dir/foo does not exist, then the server reads the directory looking for files named foo.*, and effectively fakes up a type map which names all those files, assigning them the same media types and content-encodings it would have if the client had asked for one of them by name. It then chooses the best match to the client's requirements. http://serverfault.com/questions/60/mod-rewrite-does-not-forward-get-parameters

To get around the problem, I had to modify the .htaccess file as follows:

RewriteEngine On
Options -MultiViews

RewriteBase /fileupload/
RewriteRule ^view/(.*)$ view.php?image=$1 [L]

I also changed the image source in the view.php file to make it especially explicity as follows:

<?php

$image = isset($_GET['image']) ? $_GET['image'] : false;

// Check image exists
if(! file_exists("images/{$image}")) {
    // Return 404 - image doesn't exist
}
?>
<html>
    <head></head>
    <body>
        <!-- various page elements -->
        <img src="/fileupload/images/<?php echo $image; ?>" alt="Image title" />
        <!-- various other page elements -->
    </body>
</html>

This therefore means that your directory structure with files should look like:

fileupload/
    .htaccess
    images/
        example.jpg
    view.php

When visiting /fileupload/view/example.jpg, you should then see the image rendered in your page.

Edited by blocblue

0

Wow finally problem solved
Thanks a ton blocblue
You are indeed a php guru........
Thanks so much for help

This question has already been answered. Start a new discussion instead.
Have something to contribute to this discussion? Please be thoughtful, detailed and courteous, and be sure to adhere to our posting rules.