Reply to Re: how do I tell a browser the name of a file, for download, if the file has open space in its name?

Your name:

Reply:


Posted by lawrence k on 11/16/07 19:24

On Oct 20, 11:44 am, lawrence k <lkrub...@geocities.com> wrote:
> On Oct 20, 6:33 am, The Natural Philosopher <a...@b.c> wrote:
>
>
>
> > lawrence k wrote:
> > > I've got a music studio for a client. Their whole studio is run with
> > > Macintosh computers. Macintosh computers allow file names to have open
> > > white spaces, such as "animal hospital.mp3".
>
> > > I have a download script, so customers on the website can download
> > > MP3s to their harddrive (rather than merely listen to it in their
> > > browsers):
>
> > > $fileToBuy = $_GET["fileToBuy"];
> > > if ($fileToBuy) {
> > > $pathToFile = "temporary_files/$fileToBuy";
> > > if (!file_exists($pathToFile)) $pathToFile = "site_specific_files/
> > > $fileToBuy";
> > > if (!file_exists($pathToFile)) $pathToFile = "../httpdocs/
> > > site_specific_files/$fileToBuy";
>
> > > if (file_exists($pathToFile)) {
> > > $size = @ filesize($pathToFile);
> > > if ($size > 1) {
> > > header("Content-Type: application/octet-stream");
> > > header("Content-Length: $size");
> > > header("Content-Disposition: attachment; filename=$fileToBuy");
> > > header("Content-Transfer-Encoding: binary");
> > > $pathToFile = urlencode($pathToFile);
> > > $fh = fopen("$pathToFile", "r");
> > > fpassthru($fh);
> > > } else {
> > > echo "Sorry, but we are unable to process this file at this
> > > time.";
> > > }
> > > } else {
> > > echo "Sorry, but we can not find a file named '$fileToBuy' at
> > > '$pathToFile'. ";
> > > }
> > > } else {
> > > echo "Sorry, but there doesn't seem to be a file named in the URL
> > > (fileToDownload needed in url).";
> > > }
>
> > > This works fine except when it encounters a file with an open space in
> > > it, and the studio has several thousand mp3s which have open spaces in
> > > their name.
>
> > > If a file has an open space, the above code seems to truncate the file
> > > name at the first open white space. Instead of "animal hospital.mp3",
> > > the browser starts to download "animal", with no file extension. And
> > > the download fails - instead of 6 megabytes, only 1 kilobyte
> > > downloads.
>
> > > Any insights?
>
> > Yu are looking n the wrong place.
>
> > is what happens before the first line that interests me
>
> > $fileToBuy = $_GET["fileToBuy"];
>
> > How is that GET variable generated, and what does
>
> > echo $filetobuy;
>
> > display?
>
> > My guess is the name is truncated before it even reaches the part you
> > showed us.
>
> If I echo $fileToBuy to screen, I get the whole the file name. All the
> file_exists() tests would fail, if $_GET wasn't returning the whole
> file name.
>
> However, I've added an if() test to see if I truly did get a file
> handle back from fopen(). The strange thing is, this test does not
> fail, meaning PHP was able to find the file. Check out this url:
>
> http://www.monkeyclaus.org/download.php?fileToDownload=Diario%20-%20T...
>
> The code now looks like this:
>
> $fileToBuy = $_GET["fileToBuy"];
> if (!$fileToBuy) $fileToBuy = $_GET["fileToDownload"];
>
> if ($fileToBuy) {
> $pathToFile = "temporary_files/$fileToBuy";
> if (!file_exists($pathToFile)) $pathToFile = "site_specific_files/
> $fileToBuy";
> if (!file_exists($pathToFile)) $pathToFile = "../httpdocs/
> site_specific_files/$fileToBuy";
>
> if (file_exists($pathToFile)) {
> $size = @ filesize($pathToFile);
> if ($size > 1) {
> header("Content-Type: application/octet-stream");
> header("Content-Length: $size");
> header("Content-Disposition: attachment; filename=$fileToBuy");
> header("Content-Transfer-Encoding: binary");
> $fh = fopen("$pathToFile", "r");
> if ($fh) {
> fpassthru($fh);
> } else {
> echo "Error: can't find file '$fileToBuy' ";
> }
> } else {
> echo "Sorry, but we are unable to process this file at this
> time.";
> }
> } else {
> echo "Sorry, but we can not find a file named '$fileToBuy' at
> '$pathToFile'. ";
> }} else {
>
> echo "Sorry, but there doesn't seem to be a file named in the URL
> (fileToDownload needed in url).";
>
> }
>
> Why is the file name getting truncated? Is this an HTTP header issue?




Now our customers are starting to complain. We just got this email:

Thanks again. I'm having problems getting 'Beautys Grace' and 'This
Time It's'.�
When clicking the links for those I get the following:
Sorry, but we can not find a file named 'A Whisper In The Noise - Dry
Land - 04 - This Time It\'s.mp3' at '../httpdocs/site_specific_files/A
Whisper In The Noise - Dry Land - 04 - This Time It\'s.mp3'.
Also might be worth noting that your file names have %20 characters
where your spaces should be.
i.e: A%20Whisper%20In%20The%20Noise%20-%20Dry%20Land%20-%2001%20-%20As
%20We%20Were.mp3


No other music store seems to have this problem, so I imagine the fix
is an easy one. Does anyone know what the fix is?

[Back to original message]


Удаленная работа для программистов  •  Как заработать на Google AdSense  •  England, UK  •  статьи на английском  •  PHP MySQL CMS Apache Oscommerce  •  Online Business Knowledge Base  •  DVD MP3 AVI MP4 players codecs conversion help
Home  •  Search  •  Site Map  •  Set as Homepage  •  Add to Favourites

Copyright © 2005-2006 Powered by Custom PHP Programming

Сайт изготовлен в Студии Валентина Петручека
изготовление и поддержка веб-сайтов, разработка программного обеспечения, поисковая оптимизация