David Dickson wrote: > Richard Lynch wrote: >> Plus you are unlink-ing 10 files. That's probably the real problem. >> >> You'd have to write some timing code to be sure, though, as a slow >> database server and a very fast hard drive could be involved. >> >> Here are some things you could do to speed it up, assuming you don't >> want >> the ON DELETE CASCADE option, or if your database doesn't provide that >> option. > > You should do this (even if you don't want to) because it is good > design. If when a member is deleted you want all associated tables to > also delete this member information then you should set up your foreign > keys properly. But you may not want this to *ALWAYS* happen in your business logic. I don't know enough about the application he's writing to say for sure either way. You'd think that you wouldn't want related records hanging around when deleting a user, but sometimes one does. Just depends on the application. > Something else you could do is to build one big rm statement and run it > in the background. This would save you building a cron job which > sometimes isn't possible depending on the hosting arrangement. > > <?php > > $Remove = "rm $ImageLocation1; rm $ImagLocation2; rm $ImageLocation3"; > exec("nohop $Remove > /dev/null 2>&1 &"); nohop? Maybe you mean nohup?... Or maybe I need to go read "man nohop"... :-) I've found inconsistent results with trying to fork in the shell from PHP -- Again this may go back to earlier versions, but I don't know that this will work for sure in all versions. > Where the $ImageLocationx is the full path to the image you want to > delete. The & at the end of the exec tells the command to run in the > background, which means your script won't wait for the command to finish > before continuing. The output redirection ( > /dev/null 2>&1) is also > necessary to allow the script to continue. See the PHP documentation on > exec for more details. The downside is that it makes this difficult to debug. Probably better to re-direct the errors *somewhere* so you have a chance at debugging things when (not if, when) they break. Though it probably takes care of whatever was messing me up back in the day when I was trying to get exec() to fork. I must say, though, I've found over time that setting up a cron job to take care of this kind of stuff usually works better for me and the user experience than exec/fork. Even with the & to fork, exec is not all that fast, I don't think. A quick insert to a small table so that a cron job can unlink (and delete from the table) later works better/faster for me. YMMV. Just my opinions, of course. -- Like Music? http://l-i-e.com/artists.htm -- PHP General Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php