Tuesday, December 14, 2010 at 7:24 PM.

myServerFarmRpcHandlers.saveApacheFile

on saveApacheFile (domain, path, s) {
	<<Changes
		<<12/14/10; 6:17:57 PM by DW
			<<Rewrite to use FTP on the local server. It knows how to write to the filesystem without disturbing Apache.
		<<11/29/10; 9:00:32 PM by DW
			<<Logging code caused infinite recursion. Nuke it.
		<<11/29/10; 3:43:26 PM by DW
			<<Add logging code.
		<<11/29/10; 2:31:24 PM by DW
			<<Retrofit.
		<<10/11/10; 5:00:26 PM by DW
			<<Created. 
	local (adrdata = myServerFarmSuite.init (), startticks = clock.ticks (), lasterror);
	if not adrdata^.prefs.apache.flRpcWriteEnabled {
		scripterror ("Can't save the file because RPC writing is not enabled on the server.")};
	local (pc = file.getpathchar (), folder = adrdata^.prefs.apache.folder + domain + pc);
	myServerFarmSuite.rpcCheckClientId (client); //10/16/10 by DW
	if adrdata^.prefs.ftp.enabled { //use FTP, 12/14/10 by DW
		if path beginswith "/" {
			path = string.delete (path, 1, 1)};
		path = domain + "/" + path;
		local (connection = tcp.ftp.openConnection (adrdata^.prefs.ftp.server, adrdata^.prefs.ftp.username, adrdata^.prefs.ftp.password));
		tcp.ftp.writefile (connection, s, path);
		tcp.ftp.closeConnection (connection);
		return (true)}
	else {
		if not file.exists (folder) {
			scripterror ("Can't save the file because there is no folder for the domain \"" + domain + "\".")};
		local (f = folder + string.replaceall (path, "/", pc), i);
		file.surefilepath (f);
		for i = 1 to 10 {
			try {
				file.writewholefile (f, s);
				<<log2.add (myServerFarmSuite.data.logSource, "Apache", "Wrote \"" + path + "\" on \"" + domain + ".\"", startticks)
				return (true)}
			else {
				lasterror = tryerror};
			clock.waitsixtieths (6)};
		<<log2.add (myServerFarmSuite.data.logSource, "Apache", "Error writing \"" + path + "\" on \"" + domain + ":\"" + lasterror, startticks)
		return (false)}}
<<bundle //test code
	<<client = tcp.dns.getdottedid ("monster3.scripting.com")
	<<saveApacheFile ("listings.opml.org", "subfolder/test.txt", clock.now ())



This listing is for code that runs in the OPML Editor environment. I created these listings because I wanted the search engines to index it, so that when I want to look up something in my codebase I don't have to use the much slower search functionality in my object database. Dave Winer.