Ask a Question related to PHP Development, Design and Development.

  1. #1

    Default File() too slow

    I am trying to process a CSV file but am having trouble with my hosts
    maximum execution time of 30 seconds.
    This is how the script works at the moment.
    User uploads their CSV file
    The script goes through the file() and writes smaller chunk files.
    The script then goes through processing the smaller files, populating the
    database, deleting the processed file and refreshing itself, thus starting
    again.

    This system works for files up to 15000 rows, but I need to be able to
    process larger files.
    The bottleneck is with the initial splitting, since I use the file()
    function to read the entire uploaded file.

    Does anyone know a quicker way to split a file into smaller chunks.

    TIA
    RG



    RG Guest

  2. Similar Questions and Discussions

    1. Slow processing of XML file
      Evening, I have a script which is called to look through 10,000 part numbers in an xml file. Script below... function init(){ trace('init');...
    2. CS: Excruciatingly slow Save As to eps file
      I'm in the process of saving an AI file to EPS. I Save As, select folder, select EPS, the click Save. I should be presented with the EPS options. It...
    3. Slow eps file lists
      InDesign CS is extremely slow on showing the list of files in the file-dialog when placing a file by accessing folders with a large number of eps...
    4. fLASH FILE SLOW
      I have used some flash files in my .dir projector but the flash swf files animation becomes slow while playing in director Is there a way to play...
    5. Slow File Open
      We have a WinNT 4, sp6, server where all our files are hosted. We have several Win98, Win2k Pro, and WinXP Pro computers that access the files on...
  3. #2

    Default Re: File() too slow

    > This system works for files up to 15000 rows, but I need to be able to
    > process larger files.
    > The bottleneck is with the initial splitting, since I use the file()
    > function to read the entire uploaded file.
    file() is by far NOT a bottleneck at your present Problem as it is not
    any slower than reading the using fread() and splitting it up afterwards.

    The Bottleneck is (seems like) your Database compare / writing stuff.

    It sounds like you read in eg. 15000 lines, break them down into chunks
    and then proceed all the chunks line by line, checking the database,
    comparing
    the database data with your cvs and then deciding on what to do (delete,
    insert
    update ...)

    At 15000 Entries THIS will make your Script timeout, not the file()
    command.

    If you do not believe it, try to manually read and explode it ...

    regards

    timo

    Timo Henke Guest

  4. #3

    Default Re: File() too slow


    "Timo Henke" <webmaster@fli7e.de> wrote in message
    news:bl0qhl$r0u$06$1@news.t-online.com...
    > > This system works for files up to 15000 rows, but I need to be able to
    > > process larger files.
    > > The bottleneck is with the initial splitting, since I use the file()
    > > function to read the entire uploaded file.
    >
    > file() is by far NOT a bottleneck at your present Problem as it is not
    > any slower than reading the using fread() and splitting it up afterwards.
    >
    > The Bottleneck is (seems like) your Database compare / writing stuff.
    >
    > It sounds like you read in eg. 15000 lines, break them down into chunks
    > and then proceed all the chunks line by line, checking the database,
    > comparing
    > the database data with your cvs and then deciding on what to do (delete,
    > insert
    > update ...)
    >
    > At 15000 Entries THIS will make your Script timeout, not the file()
    > command.
    >
    > If you do not believe it, try to manually read and explode it ...
    >
    > regards
    >
    > timo
    >

    The initial splitting of the file is the bottleneck, I do not compare
    anything in this procedure.
    There is not a problem with the database comparing etc, it seems to take
    about 2 seconds to do around 3000 mysql queries. This is fine.

    I just need a quick way to initially split the large file into smaller
    files.
    TIA
    RG



    RG Guest

  5. #4

    Default Re: File() too slow

    > The initial splitting of the file is the bottleneck, I do not compare
    > anything in this procedure.
    > There is not a problem with the database comparing etc, it seems to take
    > about 2 seconds to do around 3000 mysql queries. This is fine.
    lets talk about filesizes. I JUST tried it. Reading (and splitting) a 19MB
    File
    with 322000 Lines took 0.39843 seconds on My Machine:


    <?php

    list($usec, $sec) = explode(" ",microtime());
    $start =((float)$usec + (float)$sec);

    $indata = file("cvs");

    list($usec, $sec) = explode(" ",microtime());
    $end =((float)$usec + (float)$sec);

    printf("%.5f",$end-$start);

    ?>

    This IS NOT a bottleneck i believe?

    Timo

    Timo Henke Guest

  6. #5

    Default Re: File() too slow


    "Timo Henke" <webmaster@fli7e.de> wrote in message
    news:bl0rja$ul9$05$1@news.t-online.com...
    > > The initial splitting of the file is the bottleneck, I do not compare
    > > anything in this procedure.
    > > There is not a problem with the database comparing etc, it seems to take
    > > about 2 seconds to do around 3000 mysql queries. This is fine.
    >
    > lets talk about filesizes. I JUST tried it. Reading (and splitting) a 19MB
    > File
    > with 322000 Lines took 0.39843 seconds on My Machine:
    >
    >
    > <?php
    >
    > list($usec, $sec) = explode(" ",microtime());
    > $start =((float)$usec + (float)$sec);
    >
    > $indata = file("cvs");
    >
    > list($usec, $sec) = explode(" ",microtime());
    > $end =((float)$usec + (float)$sec);
    >
    > printf("%.5f",$end-$start);
    >
    > ?>
    >
    > This IS NOT a bottleneck i believe?
    >
    > Timo
    >
    Lightning fast.
    I think I've found the problem: upload_max_filesize is 2M
    It is dieing, very poorly.
    You must have changed your php.ini?
    Thanks for the pointers
    RG


    RG Guest

  7. #6

    Default Re: File() too slow

    > Lightning fast.

    yeehaa :-)
    > I think I've found the problem: upload_max_filesize is 2M
    > It is dieing, very poorly.
    > You must have changed your php.ini?
    jupp .. changed to 32M, because i often need to transfer bigger
    data in our intranet.
    > Thanks for the pointers
    hope it would work out well for you

    regards

    timo

    Timo Henke Guest

  8. #7

    Default Re: File() too slow


    "Timo Henke" <webmaster@fli7e.de> wrote in message
    news:bl0so7$vl4$05$1@news.t-online.com...
    > > Lightning fast.
    >
    > yeehaa :-)
    >
    > > I think I've found the problem: upload_max_filesize is 2M
    > > It is dieing, very poorly.
    > > You must have changed your php.ini?
    >
    > jupp .. changed to 32M, because i often need to transfer bigger
    > data in our intranet.
    >
    > > Thanks for the pointers
    >
    > hope it would work out well for you
    >
    > regards
    >
    > timo
    >
    I don't suppose there's a workaround for this?
    RG


    RG Guest

  9. #8

    Default Re: File() too slow


    "Timo Henke" <webmaster@fli7e.de> wrote in message
    news:bl0so7$vl4$05$1@news.t-online.com...
    > > Lightning fast.
    >
    > yeehaa :-)
    >
    > > I think I've found the problem: upload_max_filesize is 2M
    > > It is dieing, very poorly.
    > > You must have changed your php.ini?
    >
    > jupp .. changed to 32M, because i often need to transfer bigger
    > data in our intranet.
    >
    > > Thanks for the pointers
    >
    > hope it would work out well for you
    >
    > regards
    >
    > timo
    >
    I don't suppose there's a workaround for this?
    RG


    RG Guest

  10. #9

    Default Re: File() too slow

    In article <3f73f748$0$65579$65c69314@mercury.nildram.net>, RG's output
    was...
    > > > I think I've found the problem: upload_max_filesize is 2M
    > > > It is dieing, very poorly.
    > > > You must have changed your php.ini?
    > >
    > > jupp .. changed to 32M, because i often need to transfer bigger
    > > data in our intranet.
    >
    > I don't suppose there's a workaround for this?
    > RG
    >
    IIRC - you can do something along the lines of:

    ini_set("upload_max_filesize", "64M");


    - I understand this will only change the max size for operations in that
    particular script - not for the whole server/virtual server.
    Eto Demerzel Guest

  11. #10

    Default Re: File() too slow


    "Eto Demerzel" <eto.demerzel@fijivillage.com> wrote in message
    news:MPG.19de0adf1903d3b498971b@news-text.blueyonder.co.uk...
    > In article <3f73f748$0$65579$65c69314@mercury.nildram.net>, RG's output
    > was...
    > > > > I think I've found the problem: upload_max_filesize is 2M
    > > > > It is dieing, very poorly.
    > > > > You must have changed your php.ini?
    > > >
    > > > jupp .. changed to 32M, because i often need to transfer bigger
    > > > data in our intranet.
    > >
    > > I don't suppose there's a workaround for this?
    > > RG
    > >
    > IIRC - you can do something along the lines of:
    >
    > ini_set("upload_max_filesize", "64M");
    >
    >
    > - I understand this will only change the max size for operations in that
    > particular script - not for the whole server/virtual server.

    Tried that out but it seems that the file is uploaded before the script is
    executed which means, the file is dumped before the function is called.
    I'm sure my host wont want to change these settings, Rackshack (cheap).
    Looks like I'm gonna have to get some more expensive hosting.
    Any suggestions: PHP with GD, Multiple MySQL databases, password protect
    directories, 20gb month
    Thanks
    RG



    RG Guest

  12. #11

    Default Re: File() too slow


    "Ian.H" <ian@WINDOZEdigiserv.net> wrote in message
    news:pan.2003.09.26.09.30.10.190519@hybris.digiser v.net...
    > On Fri, 26 Sep 2003 10:22:39 +0100, RG wrote:
    >
    > >> jupp .. changed to 32M, because i often need to transfer bigger data in
    > >> our intranet.
    > >>
    >
    >
    > [ snip ]
    >
    >
    > > I don't suppose there's a workaround for this? RG
    >
    >
    > RG,
    >
    > You can put a hidden field in a form:
    >
    >
    > <input type="hidden" name="MAX_UPLOAD_SIZE" value="33554432" />
    >
    >
    > This should "do the biz" before the form is whizzed off to the server for
    > processing =)
    >
    >
    > HTH.
    >
    >
    >
    > Regards,
    >
    > Ian

    Tried that and it didn't work.
    Thanks anyway.
    Anyone else?
    RG

    >

    RG Guest

  13. #12

    Default Re: File() too slow


    "Ian.H" <ian@WINDOZEdigiserv.net> wrote in message
    news:pan.2003.09.26.09.32.36.386900@hybris.digiser v.net...
    > On Fri, 26 Sep 2003 10:29:15 +0000, Ian.H wrote:
    >
    > > <input type="hidden" name="MAX_UPLOAD_SIZE" value="33554432" />
    >
    >
    > Oops.. that should be:
    >
    >
    > <input type="hidden" name="MAX_FILE_SIZE" value="33554432" />
    >
    >
    >
    > Regards,
    >

    Tried the later too.
    Still didn't work
    Thanks though, I'm stuck here.
    RG

    >

    RG Guest

  14. #13

    Default Re: File() too slow

    > Tried that and it didn't work.
    > Thanks anyway.
    > Anyone else?
    > RG
    Just another suggestion : try to upload the file in GZ Format (if
    possible).

    This would cut down transfer and filesize to a minimum and could easily
    with NO TIME unpacked by PHPs internal gz functions.

    My previously mentioned 19MB testfile got shrinked down to 351.164 bytes.

    You get the point?

    timo

    Timo Henke Guest

  15. #14

    Default Re: File() too slow


    "Timo Henke" <webmaster@fli7e.de> wrote in message
    news:bl13ds$iv1$01$1@news.t-online.com...
    > > Tried that and it didn't work.
    > > Thanks anyway.
    > > Anyone else?
    > > RG
    >
    > Just another suggestion : try to upload the file in GZ Format (if
    > possible).
    >
    > This would cut down transfer and filesize to a minimum and could easily
    > with NO TIME unpacked by PHPs internal gz functions.
    >
    > My previously mentioned 19MB testfile got shrinked down to 351.164 bytes.
    >
    > You get the point?
    >
    > timo
    >

    Think I'm stuck, I can't trust clients with no knowledge to do this
    Thanks though
    RG


    RG Guest

  16. #15

    Default Re: File() too slow

    RG wrote:
    >
    > "Timo Henke" <webmaster@fli7e.de> wrote in message
    > news:bl13ds$iv1$01$1@news.t-online.com...
    > > > Tried that and it didn't work.
    > > > Thanks anyway.
    > > > Anyone else?
    > > > RG
    > >
    > > Just another suggestion : try to upload the file in GZ Format (if
    > > possible).
    > >
    > > This would cut down transfer and filesize to a minimum and could easily
    > > with NO TIME unpacked by PHPs internal gz functions.
    > >
    > > My previously mentioned 19MB testfile got shrinked down to 351.164 bytes.
    > >
    > > You get the point?
    > >
    > > timo
    > >
    >
    > Think I'm stuck, I can't trust clients with no knowledge to do this
    > Thanks though
    > RG
    You could probably write a tiny program in VB or something else that would split
    a CSV file (file.csv) into 2MB chunks (file1.csv, file2.csv, file3.csv ...). It
    would almost definitely be simple enough for your clients to use.

    Shawn
    --
    Shawn Wilson
    [email]shawn@glassgiant.com[/email]
    [url]http://www.glassgiant.com[/url]
    Shawn Wilson Guest

  17. #16

    Default Re: File() too slow


    "Shawn Wilson" <shawn@glassgiant.com> wrote in message
    news:3F743043.F40BDB6@glassgiant.com...
    > RG wrote:
    > >
    > > "Timo Henke" <webmaster@fli7e.de> wrote in message
    > > news:bl13ds$iv1$01$1@news.t-online.com...
    > > > > Tried that and it didn't work.
    > > > > Thanks anyway.
    > > > > Anyone else?
    > > > > RG
    > > >
    > > > Just another suggestion : try to upload the file in GZ Format (if
    > > > possible).
    > > >
    > > > This would cut down transfer and filesize to a minimum and could
    easily
    > > > with NO TIME unpacked by PHPs internal gz functions.
    > > >
    > > > My previously mentioned 19MB testfile got shrinked down to 351.164
    bytes.
    > > >
    > > > You get the point?
    > > >
    > > > timo
    > > >
    > >
    > > Think I'm stuck, I can't trust clients with no knowledge to do this
    > > Thanks though
    > > RG
    >
    > You could probably write a tiny program in VB or something else that would
    split
    > a CSV file (file.csv) into 2MB chunks (file1.csv, file2.csv, file3.csv
    ....). It
    > would almost definitely be simple enough for your clients to use.
    >
    > Shawn

    Thats not a bad idea. Would this be possible with Javascript? or maybe VB
    Script?
    Would ideally want the program to somehow interface with the import scripts,
    so ideally, browser based.
    Any ideas?
    RG


    RG Guest

  18. #17

    Default Re: File() too slow

    RG wrote:
    > > > > Just another suggestion : try to upload the file in GZ Format (if
    > > > > possible).
    > > > >
    > > > > This would cut down transfer and filesize to a minimum and could
    > easily
    > > > > with NO TIME unpacked by PHPs internal gz functions.
    > > > >
    > > > > My previously mentioned 19MB testfile got shrinked down to 351.164
    > bytes.
    > > > >
    > > > > You get the point?
    > > > >
    > > > > timo
    > > > >
    > > >
    > > > Think I'm stuck, I can't trust clients with no knowledge to do this
    > > > Thanks though
    > > > RG
    > >
    > > You could probably write a tiny program in VB or something else that would
    > split
    > > a CSV file (file.csv) into 2MB chunks (file1.csv, file2.csv, file3.csv
    > ...). It
    > > would almost definitely be simple enough for your clients to use.
    > >
    > > Shawn
    >
    > Thats not a bad idea. Would this be possible with Javascript? or maybe VB
    > Script?
    > Would ideally want the program to somehow interface with the import scripts,
    > so ideally, browser based.
    > Any ideas?
    JS, no for sure. VBScript - I doubt it, but I don't know VBScript. I doubt
    you'll be able to do it from the browser. I think you'd almost have to write a
    standalone executable and then use a browser to complete the upload normally.
    It's kind of a clunky solve, but feasible. Alternately, you could tell them to
    FTP it to a directory, then go to your program in a browser and select the file
    to use from the FTP directory. Again, clunky... :(

    Regards,
    Shawn
    --
    Shawn Wilson
    [email]shawn@glassgiant.com[/email]
    [url]http://www.glassgiant.com[/url]
    Shawn Wilson Guest

  19. #18

    Default Re: File() too slow

    In article <3F747A12.D6D57D9A@glassgiant.com>, Shawn Wilson's output
    was...
    > > Thats not a bad idea. Would this be possible with Javascript? or maybe VB
    > > Script?
    > > Would ideally want the program to somehow interface with the import scripts,
    > > so ideally, browser based.
    > > Any ideas?
    >
    > JS, no for sure. VBScript - I doubt it, but I don't know VBScript. I doubt
    > you'll be able to do it from the browser. I think you'd almost have to write a
    > standalone executable and then use a browser to complete the upload normally.
    > It's kind of a clunky solve, but feasible. Alternately, you could tell them to
    > FTP it to a directory, then go to your program in a browser and select the file
    > to use from the FTP directory. Again, clunky... :(
    >
    This sounds like just the sort of thing java applets are useful for.

    Perhaps have an applet in the web-page which selects the file, breaks it
    into smaller chunks (and/or compresses), then calls a server-side script
    to re-assemble the parts and then do whatever the script was supposed to
    do with the file in the first place.
    You might find some useful info at [url]http://javaboutique.internet.com/[/url] or
    in comp.lang.java
    Eto Demerzel Guest

  20. #19

    Default Re: File() too slow

    It sounds like you're using MySQL and if loading the data is still a
    bottleneck, have you tried using the "LOAD DATA LOCAL INFILE ..." stuff?
    I saw an order of magnitude improvement in import speed when I went
    from manually splitting my CSVs to using LOAD DATA.

    If you're also having problems uploading large files you'll also need to
    set php's post_max_size and memory_limit (if it's enabled) to something
    larger than the size of the largest file you expect.

    RG wrote:
    > Any suggestions: PHP with GD, Multiple MySQL databases, password protect
    > directories, 20gb month
    I've had good luck with pair.com.

    --Brent

    Brent Rieck Guest

  21. #20

    Default Re: File() too slow

    "RG" <Me@NotTellingYa.com> wrote in message
    news:3f73fdc5$0$65581$65c69314@mercury.nildram.net ...
    >
    > "Eto Demerzel" <eto.demerzel@fijivillage.com> wrote in message
    > news:MPG.19de0adf1903d3b498971b@news-text.blueyonder.co.uk...
    > > In article <3f73f748$0$65579$65c69314@mercury.nildram.net>, RG's output
    > > was...
    > > > > > I think I've found the problem: upload_max_filesize is 2M
    > > > > > It is dieing, very poorly.
    > > > > > You must have changed your php.ini?
    > > > >
    > > > > jupp .. changed to 32M, because i often need to transfer bigger
    > > > > data in our intranet.
    > > >
    > > > I don't suppose there's a workaround for this?
    > > > RG
    > > >
    > > IIRC - you can do something along the lines of:
    > >
    > > ini_set("upload_max_filesize", "64M");
    > >
    > >
    > > - I understand this will only change the max size for operations in that
    > > particular script - not for the whole server/virtual server.
    >
    >
    > Tried that out but it seems that the file is uploaded before the script is
    > executed which means, the file is dumped before the function is called.
    > I'm sure my host wont want to change these settings, Rackshack (cheap).
    > Looks like I'm gonna have to get some more expensive hosting.
    > Any suggestions: PHP with GD, Multiple MySQL databases, password protect
    > directories, 20gb month
    > Thanks
    > RG
    I believe the 'ini_set("upload_max_filesize", "64M");' needs to be set in
    the script in which the FORM element is placed, not in the script where the
    file is being processed.

    - Virgil


    Virgil Green Guest

Posting Permissions

  • You may not post new threads
  • You may post replies
  • You may not post attachments
  • You may not edit your posts

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139